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.如果能取到怎么进行验证?因为要循环。

解决方案 »

  1.   


    Object object  = getFieldValue(getFieldName(), obj);
    Comparable value = (Comparable) object;怎么样才能分别取?
      

  2.   

    大侠,你可以把它们封装到一个bean中啊public class Person{
            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>看行不。。
      

  3.   

    定义两个字段 get set 方法 获取前台数据,要不就用xml验证吧 那个挺好  还不用在类里写多余的验证
      

  4.   

      看你是否使用了Spring的依赖注入!  看你自己在使用的时候是否又从新NEW了一下! DB跟一下就搞定了!