当前位置: 代码迷 >> Java Web开发 >> struts2的一个小疑点
  详细解决方案

struts2的一个小疑点

热度:5322   发布时间:2013-02-25 21:07:25.0
struts2的一个小问题

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.如果能取到怎么进行验证?因为要循环。非得全部拿到后台验证么,,可以先在前台js验证一下,,  看你是否使用了Spring的依赖注入!  看你自己在使用的时候是否又从新NEW了一下! DB跟一下就搞定了! 
引用:
一个一个拿来验证吧




Object object  = getFieldValue(getFieldName(), obj);
Comparable value = (Comparable) object;

怎么样才能分别取?
引用:
楼主先不说你的验证,你的数字判断条件也写的不对吧,年龄必须在0-100之间,你的if条件写的刚好相反

不满足条件就加错误信息啊。一个一个拿来验证吧定义两个字段 get set 方法 获取前台数据,要不就用xml验证吧 那个挺好  还不用在类里写多余的验证大侠,你可以把它们封装到一个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>

看行不。。
楼主先不说你的验证,你的数字判断条件也写的不对吧,年龄必须在0-100之间,你的if条件写的刚好相反觉得还是先在前台用js验证下比较好!
  相关解决方案