public class AgeValidator extends FieldValidatorSupport{ public void validate(Object obj) throws ValidationException {
Object object = getFieldValue(getFieldName(), obj);
Comparable value = (Comparable) object;
//要求输入的字段必须能转换成int类型
Integer age = (Integer)value;
//这个数值必须在1-100之间]
if(age<0||age>100){
addFieldError(getFieldName(), obj);
}
}}
这个是struts2的自定义验证器
我想问的是,现在表单有不止一个数据提交,比如说页面有<s:textfield name="age" label="年龄"></s:textfield>
<s:textfield name="name" label="姓名"></s:textfield>age和name两个字段
现在的问题是value第一次拿到的是age在表单上的值,并且可以进行下面验证,但是我想问的是怎么拿到name的值?
我打了断点之后发现obj(不是Object)这个参数里有age和name的属性。而且getFieldName第一次的值是age,第二次是name
最后我还发现,表单上有几个属性,这个验证整个方法就执行几次。那不是就不能进行多个字段验证了吗?第一次int类型的验证成功,第二次是个name它还会执行Integer age = (Integer)value;就出异常了。
表达能力不行,总结下问题:
1.Object object = getFieldValue(getFieldName(), obj);
Comparable value = (Comparable) object;通过这个方法怎么拿多个表单提交的值?
2.如果能取到怎么进行验证?因为要循环。
Object object = getFieldValue(getFieldName(), obj);
Comparable value = (Comparable) object;怎么样才能分别取?
private Integer age;
private String name;
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
然后在你的类里面声明一个成员变量:private Person person;写上get-set方法前台这样写:
<s:textfield name="person.age" label="年龄"></s:textfield>
<s:textfield name="person.name" label="姓名"></s:textfield>看行不。。