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中的