之前有一段时间,我老是把struts2的validate验证与类型转换混为一谈.最近才发现两者是两回事.
从拦截器配置不可以看来.找到struts-default.xml:发现如下代码:
<interceptor-stack name="defaultStack"> <!--类型转换错误的拦截器 --> <interceptor-ref name="conversionError"/> <!--数据校验的拦截器 --> <interceptor-ref name="validation"> <param name="excludeMethods">input,back,cancel,browse</param> </interceptor-ref> </interceptor-stack>
如此,才知道.仅仅定义了validate验证的xml,仅仅只能解决验证问题.当类型转换失败时,只能执行默认的报错内容.
为了了解如何自定义类型转换失败时的提醒内容.我做了一个简单的例子.
首先,建一个struts2的project.如下图所示:
定义action
public class Action1 extends ActionSupport { private int iCount; public String execute() throws Exception { this.addActionMessage("提交成功!"); return SUCCESS; } public int getICount() { return iCount; } public void setICount(int count) { iCount = count; } }
定义验证xml:
<validators> <field name="iCount"> <field-validator type="int" short-circuit="true"> <param name="min">0</param> <param name="max">10</param> <message>输入的数据必须为整数,且范围是${min}到${10}之间</message> </field-validator> </field> </validators>
在浏览器地址栏中输入:http://127.0.0.1:9900/TestStrutsConvertor/result1.jsp
运行结果如下所示:
显然,我们的validate配置生效了,但类型转换却不在此范围内,无法在validate的xml配置.
下面,给出自定义类型转换失败处理的配置.
其实很简单,在Action1.java的所在包路径下,创建一个名为Action1,后缀为properties的文件.切记:文件名必须为Action1
然后在Action1.properties中配置如下语句:
invalid.fieldvalue.iCount=输入内容必须为整数
再次在浏览器地址栏中输入:http://127.0.0.1:9900/TestStrutsConvertor/result1.jsp
运行结果如下:
如此,我们的目的就达到了.