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验证一下,,
------解决方案--------------------一个一个拿来验证吧
------解决方案--------------------
Object object = getFieldValue(getFieldName(), obj);
Comparable value = (Comparable) object;
怎么样才能分别取?
------解决方案--------------------大侠,你可以把它们封装到一个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>
看行不。。
------解决方案--------------------定义两个字段 get set 方法 获取前台数据,要不就用xml验证吧 那个挺好 还不用在类里写多余的验证
------解决方案--------------------觉得还是先在前台用js验证下比较好!
------解决方案--------------------楼主先不说你的验证,你的数字判断条件也写的不对吧,年龄必须在0-100之间,你的if条件写的刚好相反
------解决方案--------------------
不满足条件就加错误信息啊。
------解决方案-------------------- 看你是否使用了Spring的依赖注入! 看你自己在使用的时候是否又从新NEW了一下! DB跟一下就搞定了!