Struts2的校验框架是本身基于XML的,它是针对于每个Action的
1.字段校验
(1)在需要校验的RegisterAction.java的同一个包下面创建RegisterAction-validation.xml
即(*-validation.xml),引入dtd
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">即在struts下载的源码
包中的struts-2.1.8.1-all\apps\struts2-mailreader-2.1.8.1\WEB-INF\classes\mailreader2
\Subscription-validation.xml中粘贴即可。
(2)用firefox打开上面链接
(3)校验框架的xml文件的根元素为<field-validator type="stringlength"></field-validator>
其中type的值请参照xwork*.jar\com.opensymphony.xwork2.validator.validators\default.xml
(4)校验信息添加到fielderror级
(5)RegisterAction-validation.xml中具体配置如下:
<field name="username">
<field-validator type="requiredstring" short-circuit="false">
<param name="trim">true</param>
<message>username should not be blank!</message>
</field-validator>
<field-validator type="stringlength">
<param name="trim">true</param>
<param name="minLength">6</param>
<param name="maxLength">10</param>
<message>username should be between ${minLength} and ${maxLength}</message>
</field-validator>
</field>
其中,<field-validator>标签中的short-circuit表示短路,当short-circuit=“true”时,如果
本次校验不通过,下面的校验不会进行。
2.非字段校验
在RegisterAction-validation.xml中配置代码如下:
<validator type="requiredstring">
<param name="fieldName">username</param>
<message>username should not be blank!</message>
</validator>
<validator type="stringlength">
<param name="fieldName">username</param>
<param name="minLength">6</param>
<param name="maxLength">10</param>
<message>username should be between ${minLength} and ${maxLength}</message>
</validator>
注意:字段校验与非字段校验的区别:
字段校验注重的是“我去校验谁,用什么来校验”;
非字段校验注重的是“我用什么来校验,我去校验谁”;
3.当在struts.xml中调用action中的某一个方法时,我们可以在struts.xml中配置如下:
<action name="register" class="com.test.action.RegisterAction" method="abc">
<result name="success">/success.jsp</result>
<result name="input">/register2.jsp</result>
</action>
如果要对输入的内容进行校验,我们可以在RegisterAction.java的同一个包下创建
RegisterAction-abc-validation.xml
注意:如果RegisterAction-abc-validation.xml与RegisterAction-validation.xml同时都存在,
那么,在调用abc()方法时,两个配置文件中的校验都会被执行。
4.Struts2同样支持客户端校验
(1)<s:form>标签的主题(theme)属性一定不能设置为simple
(2)<s:form>标签的validate属性设置为true
最好不要使用Struts2给我们提供的客户端校验方式
总结:
(1)真正存放filed级别错误信息的对象是LinkedHashMap
(2)该LinkedHashMap的key是String类型的,value是ArrayList类型的
(3)对于Action级别的错误信息,实际上是放置在ArrayList中的