Struts2输入校验

struts2的输入校验针对输入进行业务规则的校验,譬如是否必填、字符长度、是否是邮箱格式、是否是电话格式、手机格式等等。

struts2的校验分为两种,第一种是基于代码的,就是在action中编写validate方法进行校验;第二种就是基于xml的,就是编写配置文件让struts2框架进行调用校验。

 

 (一)基于代码的输入校验

 

再熟悉一下类型转换与输入校验的流程:
1、首先struts2对客户端传来的数据进行类型转换。struts2不能进行类型转换的时候,struts2框架会自动生成一条错误信息并将该错误信息放到addFieldError里面。
2、类型转换完毕后,不论类型转换成功与否都要执行action的validate方法。由validate方法进行业务规则的输入校验
3、如果类型转换和输入校验都没有错误发生,那么进入execute方法(业务逻辑)。

 

所以对action进行输入校验,只需要重写action的validate方法即可。既可以调用addFieldError,也可以调用addActionError进行业务规则校验。

 

在struts2中默认情况下一个action只拥有一个业务逻辑方法execute。因此在struts.xml文件中,经常可以看到这样的配置项:

<action name="login" class="com.test.action.LoginAction">
   <result name="success">/success.jsp</result>
   <result name="input">/input.jsp</result>
</action>

 

struts2遇到这样的配置项,就会自动去执行action里的execute方法。

但有些情况下,往往一个action里拥有多个业务逻辑方法,譬如申请表模块,就有新建、编辑、保存、删除、导出等业务逻辑。在这种情况下,就可以在action里增加多个方法来处理业务逻辑。代码如下:

public class ReprotAction extends ActionSupport

{

      //忽略属性

     public String newReport() throws Exception

     {//}

      public String modifyReport() throws Exception

     {//}

      public String saveReport() throws Exception

     {//}

       public String deleteReport() throws Exception

     {//}      

}

 

在配置struts.xml文件的时候,在action元素中指定method属性,代码如下:

<action name="newReport" class="com.test.action.ReportAction" method="newReport">
      <result name="success" type="freemarker">/modifyReport.ftl</result>
</action>
<action name="modifyReport" class="com.test.action.ReportAction" method="modifyReport">
      <result name="success" type="freemarker">/modifyReport.ftl</result>
</action>
...... 

现在有多个业务逻辑方法,应该针对每个业务逻辑进行校验。但现在只有一个validate方法,不可能把所有业务逻辑的验证都放在validate方法里。怎么办呢?struts2为我们解决了这个难题,就是针对每个业务逻辑方法增加一个validate方法,方法的命名规则如下validate+方法名(方法的第一个字母大写),譬如validateNewReport();这样在validateNewReport方法添加的校验就针对newReport方法了。但是这里要特别注意的是,如果action中重写了validate方法,那么validate方法都会被调用。

以newReport为例,action方法的调用顺序如下:validateNewReport()->newReport()->validate()

因此在这种情况下,不要重写validate方法。但是这有牵涉到一个问题,如果不写validate方法,那execute方法如何校验呢?按照上面的规则,只要编写一个validateExecute方法进行校验就可以了。

 

在输入校验的过程中,调用addFieldError()和addActionError()方法,把错误保存起来。至于采用哪个方法根据项目和自己的需要进行选择。

要显示这些错误,可以在输入页面中增加如下代码:

<s:fielderror/>显示field级别的错误消息

<s:actionerror/> 显示action级别的错误消息

二、基于配置文件的输入校验

 

struts的框架校验针对单个action,每个action都需单独配置。为了让struts2找到配置文件,struts2对配置文件的命名进行了规范。struts2针对action里每个业务方法都需要建立单独的校验配置文件。配置文件的命名方式为xxAction-method-validation.xml,对于只针对execute方法的校验文件,可以省略方法名,命名方式为xxAction-validation.xml.譬如LoginAction的配置文件命名为LoginAction-validation.xml。如果action包含多个业务逻辑方法,譬如上一章节的ReportAction,那么要对每个业务方法进行校验,需要针对每个方法建立配置文件。譬如对ReportAction的saveReport()方法进行校验,则配置文件必须命名为ReportAction-saveReport-validation.xml.两种配置文件的命名方式很类似基于代码的输入校验,validate()和validateSaveReport().配置文件必须和action放在同一目录下。

 

如何创建xml输入校验文件?


1、在action目录下新建一xml文件
2、在struts2下载包apps目录下查找xxAction-validation.xml文件
3、拷贝下列代码到新建xml文件中

<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
 "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">

  4、可以对dtd文件进行了解,以便编写配置文件。这里对dtd不做详细说明。
  5、根据dtd编写配置文件。对于一些属性值可以参考com.opensymphony.xwork2.validator.validators包下的defalut.xml文件和相应类。建议到opensymphony去下载xwork和ognl的源码进行关联。

 

下面是已经写好的一段配置代码:

<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.3//EN"
 "http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd">
<validators>
 <field name="bean.psproductname">
    <field-validator type="requiredstring">
        <message>软件名称不可为空</message>
    </field-validator>
    <field-validator type="stringlength">
        <param name="maxLength">100</param>
        <message>软件名称长度不能超过${maxLength}个字符</message>
      </field-validator>
   </field> 
   <field name="bean.pdfinishday">
      <field-validator type="required">
      <message>软件完成时间不可为空</message>
      </field-validator>
 </field> 
</validators>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值