struts2 默认的提示
action类中validate方法,birthday是Date类型的if(birthday==null){addFieldError("birthday","birth...
action类中validate方法,birthday是Date类型的
if (birthday ==null) {
addFieldError("birthday", "birthday error");
}
当jsp页面如果不输入 那么显示的错误提示是对的,只有birthday error
而当jsp页面如果输入一个字符串不是日期格式,那么struts2自带的类型转换错误提示显示出来了 而且因为类型转换失败birthday==null 所以自定义的验证也显示出来了
怎么让转型错误的时候只显示默认的提示 不都显示出来 展开
if (birthday ==null) {
addFieldError("birthday", "birthday error");
}
当jsp页面如果不输入 那么显示的错误提示是对的,只有birthday error
而当jsp页面如果输入一个字符串不是日期格式,那么struts2自带的类型转换错误提示显示出来了 而且因为类型转换失败birthday==null 所以自定义的验证也显示出来了
怎么让转型错误的时候只显示默认的提示 不都显示出来 展开
3个回答
展开全部
因为struts2中默认验证是先进行类型转换紧接着是验证,试想如果没有类型转换,验证就无从谈起,所以struts2中的类型转换和验证在逻辑上是被看成一个操作。其具体的实现是通过三个拦截起来进行的,在struts2-core包的struts-default.xml中的默认拦截器栈defaultStack中可以找到三个紧挨着的拦截器:
<interceptor-ref name="params">
<param name="excludeParams">dojo\..*,^struts\..*</param>
</interceptor-ref>
<interceptor-ref name="conversionError"/>
<interceptor-ref name="validation">
<param name="excludeMethods">input,back,cancel,browse</param>
</interceptor-ref>
为了达到逻辑上作为一个操作的目的,struts2在类型转换的拦截器params中当出现类型转换错误时并没有抛出异常,而是将异常信息保存到ActionContext中,然后通过拦截器conversionError将其类型转换异常信息封装到为fieldError里,但在拦截器validation中当出现验证错误时也会将其封装到为fieldError里,同时当发现有fieldError时会抛出异常将系统转入input视图,所以就会出现你上面的情况。解决的办法有三个:
第一,也是最好的解决方法是在客户端的js验证输入格式来加以限制了。
第二,使用自己定义的拦截器栈,将上面的拦击器conversionError去掉,这样类型转换时的错误信息就不会出现在fieldError里,不过这样做是否会出现其它意想不到的小错误我没有验证过。
第三,自己定义类型转换拦截器替换默认的类型转换拦截器,当出现类型转换错误时将型转换异常信息封装到为fieldError里同时抛出异常将系统转入input视图,则下面的验证就不会进行。
<interceptor-ref name="params">
<param name="excludeParams">dojo\..*,^struts\..*</param>
</interceptor-ref>
<interceptor-ref name="conversionError"/>
<interceptor-ref name="validation">
<param name="excludeMethods">input,back,cancel,browse</param>
</interceptor-ref>
为了达到逻辑上作为一个操作的目的,struts2在类型转换的拦截器params中当出现类型转换错误时并没有抛出异常,而是将异常信息保存到ActionContext中,然后通过拦截器conversionError将其类型转换异常信息封装到为fieldError里,但在拦截器validation中当出现验证错误时也会将其封装到为fieldError里,同时当发现有fieldError时会抛出异常将系统转入input视图,所以就会出现你上面的情况。解决的办法有三个:
第一,也是最好的解决方法是在客户端的js验证输入格式来加以限制了。
第二,使用自己定义的拦截器栈,将上面的拦击器conversionError去掉,这样类型转换时的错误信息就不会出现在fieldError里,不过这样做是否会出现其它意想不到的小错误我没有验证过。
第三,自己定义类型转换拦截器替换默认的类型转换拦截器,当出现类型转换错误时将型转换异常信息封装到为fieldError里同时抛出异常将系统转入input视图,则下面的验证就不会进行。
大雅新科技有限公司
2024-11-19 广告
2024-11-19 广告
这方面更多更全面的信息其实可以找下大雅新。深圳市大雅新科技有限公司从事KVM延长器,DVI延长器,USB延长器,键盘鼠标延长器,双绞线视频传输器,VGA视频双绞线传输器,VGA延长器,VGA视频延长器,DVI KVM 切换器等,优质供应商,...
点击进入详情页
本回答由大雅新科技有限公司提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询