`
Riddick
  • 浏览: 642154 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

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>

 

分享到:
评论

相关推荐

    Struts2输入校验总结

    ### Struts2输入校验深度解析 #### 一、手动输入完成校验 在Struts2框架中,输入校验是确保数据完整性和安全性的重要环节。对于手动输入完成校验,Struts2提供了灵活的机制。 1. **普通处理方式**:在Action类中...

    Struts 2 输入校验

    Struts 2 输入校验

    Struts2 输入校验

    本篇文章将深入探讨Struts2中的输入校验机制。 一、Struts2 输入校验概述 Struts2提供了多种进行输入校验的方式,包括Action级别校验、Validator框架校验、拦截器校验以及使用JSR303/JSR349 Bean Validation标准。...

    struts2输入校验

    本文将深入探讨Struts2中的输入校验机制,以及如何对指定方法进行输入校验。 在Struts2中,输入校验通常分为两种方式:客户端校验和服务器端校验。客户端校验主要通过JavaScript在用户端进行,可以提供即时反馈,但...

    struts2输入校验深入总结

    本文将深入探讨Struts2中的输入校验机制,帮助开发者更好地理解和应用。 一、Struts2输入校验概述 在Struts2中,输入校验主要用于验证用户通过表单提交的数据,防止无效或恶意数据进入系统。Struts2提供了多种方式...

    Struts2的输入校验

    在Struts2中,输入校验是确保数据安全、准确和有效的重要环节。本篇文章将深入探讨Struts2的输入校验机制及其相关知识点。 **输入校验的重要性** 输入校验是Web应用开发中的关键步骤,它可以防止恶意用户提交无效或...

    [原]Struts2输入校验

    在Struts2中,输入校验是确保数据安全性和应用稳定性的重要环节。它帮助开发者防止非法或无效的数据进入系统,从而减少潜在的错误和安全漏洞。 **Struts2输入校验机制** 1. **内置验证框架**: Struts2提供了内置的...

    struts2输入校验总结

    Struts2是一个流行的Java web开发框架,它提供了一套强大的输入校验机制,确保用户提交的数据符合业务逻辑的要求。在本文中,我们将深入探讨Struts2的输入校验功能,包括手动输入校验和基于验证框架的输入校验。 ##...

    Struts2的输入校验实例代码

    在Struts2中,输入校验是确保数据完整性和安全性的重要环节。输入校验可以防止恶意用户提交无效或有害的数据,并确保应用程序的稳定运行。以下是关于Struts2输入校验的详细知识: 1. **客户端校验**: 客户端校验...

    struts2的输入校验

    struts2的输入校验有两种方式: 一.重写validate()方式 二.采用配置文件的方式 先我们就以一个简单的登录的例子来讲解这个吧. 重点讲解下,第二个采用配置文件的方式: 1.添加一个xml的校验文件,保存在...

    Struts2数据校验与国际化

    Struts2作为一款流行的Java Web框架,其在处理用户输入数据和实现多语言支持方面具有强大的功能。在“Struts2数据校验与国际化”这一主题中,我们将深入探讨Struts2如何通过不同的验证机制确保数据的有效性,以及...

    Struts2 校验器

    在Struts2中,校验器(Validator)是处理用户输入验证的核心组件,确保提交到服务器的数据符合预设的业务规则。这篇博客文章可能是关于如何使用Struts2的内置校验机制以及自定义校验规则的探讨。 Struts2的校验框架...

    浪曦_Struts2应用开发系列_第5讲.Struts2的输入校验.rar

    在Struts2框架中,输入校验是一个关键环节,它确保了用户提交的数据符合应用的要求,从而避免了无效数据导致的错误或安全问题。本讲将深入探讨Struts2的输入校验机制。 1. **Struts2输入校验概述** - 输入校验是...

    struts2中的输入校验

    在Struts2中,输入校验是确保用户提交的数据符合预设规范的重要环节,可以防止非法数据进入系统,保护数据的完整性和安全性。本文将详细探讨Struts2中的输入校验机制。 首先,Struts2提供了两种主要的校验方式:...

Global site tag (gtag.js) - Google Analytics