`

Struts2表单验证方式

阅读更多

1. 编码方式校验
  1) Action一定要继承自ActionSupport
  2) 针对某个要进行校验的请求处理方法编写一个 public void validateXxx()方法,在方法内部进行表单数据校验.
  3) 也可针对所有的请求处理方法编写public void validate()方法。
  4) 在校验方法中,可以通过addFieldError()方法来添加字段校验错误消息。
  5) 当校验失败时,Struts框架会自动跳转到name为input的Result页面。在校验失败页面中,可以使用<s:fielderror/>来显示错误消息
  6) 简单,灵活。但重用性不高。

 

2.  XML配置方式校验。在编码方式之前被执行。
  1) 针对要校验的Action类,在同包下编写一个名为:Action类名-validation.xml校验规则文件。
  2) 在校验规则文件中添加校验规则:具体的校验器名,参数可参看Struts2的reference或Struts2的API。
     a) Field校验:针对Action类中每个非自定义类型的Field进行校验的规则。
    <field name="要校验的Field名">
     <field-validator type="校验规则器名" short-circuit="是否要短路径校验(默认是false)">
         <param name="校验器要使用的参数名">值</param>
            <message>校验失败时的提示消息</message>
  </field-validator>
  <!-- 还可添加其它的校验规则 -->
 </field>
 
     b) 非Field校验:针对Action类的某些Field使用OGNL表达进行组合校验。
    <validator type="fieldexpression">
  <param name="fieldName">pwd</param>
     <param name="fieldName">pwd2</param>
     <param name="expression"><![CDATA[pwd==pwd2]]></param><!-- OGNL表达式 -->
     <message>确认密码和密码输入不一致</message>
 </validator>
 
     c) visitor校验:主要是用来校验Action类中的自定义类型Field。(针对使用模型驱动方式时)
       i) 在Action类的的校验规则文件中针对自定义类型Field使用visitor校验规则。
    <!-- 针对自定义Field使用visitor校验 -->
 <field name="user">
  <field-validator type="required" short-circuit="true">
            <message>用户的信息必填</message><!-- 消息前缀 -->
  </field-validator>
  <field-validator type="visitor"><!-- 指定为visitor校验规则 -->
   <param name="context">userContext</param><!-- 指定本visitor校验的上下文名 -->
            <param name="appendPrefix">true</param><!-- 是否要添加校验失败消息的前缀 -->
            <message>用户的</message><!-- 消息前缀 -->
  </field-validator>
 </field>
    ii) 针对visitor的Field编写一个校验规则文件.文件名为: visitor字段类型名[-visitor校验的上下文名]-validation.xml. 例如: 本例中的文件名为User-userContext-validation.xml
                  注意: 此文件要存放到visitor字段类型所在的包下.
    iii) 在visitor的Field校验规则文件中针对要校验的Field添加校验规则.
   3) 在校验失败页面(名为input的result页面)中,可以使用<s:fielderror/>来显示错误消息。
   4) 默认情况下,XML的校验规则对Action中所有的请求处理方法生效.此时应该只针对每个要校验的请求处理方法指定校验。有两种方式:
      i) 只为Action中的指定方法指定校验规则文件,配置文件命名为:Action类型名-别名-validation.xml,
                      别名是要校验的方法对应的Action标签的name属性值。
                      如:UserAction在struts2.xml的配置为:
    <package name="my" extends="struts-default" namespace="/">
  <action name="user_*" class="com.javacrazyer.web.action.UserAction" method="{1}">
   <result name="success">/info.jsp</result>
   <result name="input">/user_{1}.jsp</result>
  </action>
    </package>             
                ● UserAction中有registe方法和login方法,要对registe方法进行校验,则它的校验规则文件名为:UserAction-user_registe-validation.xml。
                 ● 如果使用visitor校验器,必需指定visitor校验的上下文名。
      ii) 在校验拦截器中指定要验证的方法。不太实用。
   <action name="user_*" class="com.javacrazyer.web.action.UserAction" method="{1}">
    <result name="success">/info.jsp</result>
    <result name="input">/user_{1}.jsp</result>
     <interceptor-ref name="defaultStack">
        <!-- 给校验拦截器指定不进行校验的方法列表:用逗号隔开 -->
        <param name="validation.excludeMethods">*</param>
        <!-- 给校验拦截器指定要进行校验的方法列表:用逗号隔开 -->
        <param name="validation.includeMethods">regist</param>
      </interceptor-ref>
   </action>
   5) 同时使用客户端校验和服务器端校验
      i) 设置<s:form>标签的validate属性:
         false:默认值。校验框架只执行服务器端校验。
         true:先执行客户端校验,然后再执行服务器端校验。
         form标签会根据你在服务器端配置的验证规则生成对应的JavaScript验证代码。
                      目前支持的内置校验器:required、requiredstring、stringlength、regex validator、email、url、int、double
      ii) 不太好用,不建议使用。 建议使用jQuery进行页面表单校验。
   6) 自定义校验器:
      i) 继承自FieldValidatorSupport抽象类。重写validate(Object obj)方法
      ii) 注册校验器类. 在应用程序的classpath下新建一校验器注册文件。名为validators.xml,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
        "-//OpenSymphony Group//XWork Validator Config 1.0//EN"
        "http://www.opensymphony.com/xwork/xwork-validator-config-1.0.dtd">
<validators>
  <validator name="校验器名" class="校验器类的全限定名"/>
</validators>

3. Annotation方式校验: Struts2提供了注解的方式校验
  1) @Validation 指明这个类或者接口将使用基于注解的校验。Struts2.1中已被标识为过时。
  2) @Validations() 在同一个方法上要使用多个注解校验时。
  3) @SkipValidation 指定某个方法不需要校验。否则所有方法都会使用校验。也可以在检验拦截器中使用validateAnnotatedMethodOnly
  4) 13个内置校验器的注解版本:(注:这些注解都只能用在方法级别上) 具体参数参见Struts2的API或Reference。
@RequiredFieldValidator
@RequiredStringValidator
@StringLengthFieldValidator
@IntRangeFieldValidator
@DoubleRangeFieldValidator
@DateRangeFieldValidator
@ExpressionValidator
@FieldExpressionValidator
@RegexFieldValidator
@EmailValidator
@UrlValidator
@VisitorFieldValidator
@ConversionErrorFieldValidator


XML配置式校验器---注册页面
acc_registe.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>  
    <%@ taglib uri="/struts-tags" prefix="s" %>  
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
    <html>  
      <head>  
        <title>Struts2中基于XML配置式的校验器使用示例</title>  
      </head>  
      <body>  
    <h3>XML配置式校验器---注册页面</h3><hr/>  
      
    <div style="color:red"><s:fielderror/></div>  
    <form action="acc_registe.action" method="post">  
        <table>  
            <tr>  
                <td>ID</td>  
                <td><input type="text" name="id" value="${param.id}"/></td>  
            </tr>  
            <tr>  
                <td>登录名</td>  
                <td><input type="text" name="name" value="${param.name}"/></td>  
            </tr>  
            <tr>  
                <td>密码</td>  
                <td><input type="password" name="pwd"/></td>  
            </tr>  
            <tr>  
                <td>重复密码</td>  
                <td><input type="password" name="pwd2"/></td>  
            </tr>  
            <tr>  
                <td>时间</td>  
                <td><input type="text" name="registed_date" value="${param.registed_date}"/></td>  
            </tr>  
            <tr>  
                <td>email</td>  
                <td><input type="text" name="email" value="${param.email}"/></td>  
            </tr>  
            <tr>  
                <td>考试成绩</td>  
                <td><input type="text" name="score" value="${param.score}"/></td>  
            </tr>  
            <tr>  
                <td colspan="2"><input type="submit" value=" 提交 "/></td>  
            </tr>  
        </table>  
    </form>  
      </body>  
    </html>

 src/struts.xml
<?xml version="1.0" encoding="UTF-8" ?>  
    <!DOCTYPE struts PUBLIC  
        "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"  
        "http://struts.apache.org/dtds/struts-2.1.7.dtd">  
      
    <struts>  
        <!-- 请求参数的编码方式 -->  
        <constant name="struts.i18n.encoding" value="UTF-8"/>  
        <!-- 指定被struts2处理的请求后缀类型。多个用逗号隔开 -->  
        <constant name="struts.action.extension" value="action,do,go,xkk"/>  
        <!-- 当struts.xml改动后,是否重新加载。默认值为false(生产环境下使用),开发阶段最好打开  -->  
        <constant name="struts.configuration.xml.reload" value="true"/>  
        <!-- 是否使用struts的开发模式。开发模式会有更多的调试信息。默认值为false(生产环境下使用),开发阶段最好打开  -->  
        <constant name="struts.devMode" value="false"/>  
        <!-- 设置浏览器是否缓存静态内容。默认值为true(生产环境下使用),开发阶段最好关闭  -->  
        <constant name="struts.serve.static.browserCache" value="false" />  
        <!-- 是否允许在OGNL表达式中调用静态方法,默认值为false -->  
        <constant name="struts.ognl.allowStaticMethodAccess" value="true"/>  
          
        <!-- 指定由spring负责action对象的创建   
        <constant name="struts.objectFactory" value="spring" />  
        -->  
        <!-- 是否开启动态方法调用 -->  
        <constant name="struts.enable.DynamicMethodInvocation" value="false"/>  
          
        <package name="my" extends="struts-default" namespace="/">  
            <action name="acc_*" class="com.javacrazyer.web.action.AccountAction" method="{1}">  
                <result name="success">/info.jsp</result>  
                <result name="input">/acc_{1}.jsp</result>  
            </action>  
              
        </package>  
          
    </struts>  

AccountAction.java
package com.javacrazyer.web.action;  
      
    import java.util.Date;  
      
    import com.opensymphony.xwork2.ActionSupport;  
      
      
    public class AccountAction extends ActionSupport {  
        private static final long serialVersionUID = -1418893621512812472L;  
        private Integer id;  
        private String name;  
        private String pwd;  
        private String pwd2;  
        private Double score;  
        private Date registed_date;  
        private String email;  
          
        public String registe() throws Exception{  
            System.out.println("registe-------------------");  
            return SUCCESS;  
        }  
          
        public String login()throws Exception{  
            return SUCCESS;  
        }  
          
        public Integer getId() {  
            return id;  
        }  
        public void setId(Integer id) {  
            this.id = id;  
        }  
        public String getName() {  
            return name;  
        }  
        public void setName(String name) {  
            this.name = name;  
        }  
        public Double getScore() {  
            return score;  
        }  
        public void setScore(Double score) {  
            this.score = score;  
        }  
        public Date getRegisted_date() {  
            return registed_date;  
        }  
        public void setRegisted_date(Date registedDate) {  
            registed_date = registedDate;  
        }  
        public String getEmail() {  
            return email;  
        }  
        public void setEmail(String email) {  
            this.email = email;  
        }  
      
        public String getPwd() {  
            return pwd;  
        }  
      
        public void setPwd(String pwd) {  
            this.pwd = pwd;  
        }  
      
        public String getPwd2() {  
            return pwd2;  
        }  
      
        public void setPwd2(String pwd2) {  
            this.pwd2 = pwd2;  
        }  
    }

 AccountAction-validation.xml [与AccountAction同目录]
<?xml version="1.0" encoding="UTF-8"?>  
    <!DOCTYPE validators PUBLIC   
        "-//OpenSymphony Group//XWork Validator 1.0.2//EN"   
        "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">  
    <validators>  
        <!-- 字段校验 -->  
        <field name="id">  
            <field-validator type="required" short-circuit="true">  
                <message>ID必填的</message>  
            </field-validator>  
            <field-validator type="int">  
                <param name="min">20</param>  
                <param name="max">50</param>  
                <message>ID必须在 ${min} 到 ${max} 之间</message>  
            </field-validator>  
        </field>  
        <field name="name">  
            <field-validator type="requiredstring" short-circuit="true">  
                <message>姓名是必填的</message>  
            </field-validator>  
            <field-validator type="regex">  
                <param name="expression"><![CDATA[(^[a-zA-Z_]\w{3,9}$)]]></param>  
                <message>姓名不合法</message>  
            </field-validator>  
        </field>  
        <field name="pwd">  
            <field-validator type="requiredstring" short-circuit="true">  
                <message>密码是必填的</message>  
            </field-validator>  
        </field>  
          
        <!-- 非字段校验 -->  
        <validator type="fieldexpression">  
            <param name="fieldName">pwd</param>  
            <param name="fieldName">pwd2</param>  
            <param name="expression"><![CDATA[pwd==pwd2]]></param><!-- OGNL表达式 -->  
            <message>确认密码和密码输入不一致</message>  
        </validator>  
          
        <field name="score">  
            <field-validator type="double">  
                 <param name="minInclusive">0.0</param>  
                   <param name="maxInclusive">100.0</param>  
                   <message>成绩必须在${minInclusive}和${maxInclusive}之间</message>  
            </field-validator>  
        </field>  
        <field name="email" >  
            <field-validator type="regex">  
                 <param name="expression"><![CDATA[(^[_A-Za-z0-9-]+(\.[_A-Za-z0-9-]+)*@([A-Za-z0-9-])+((\.com)|(\.cn)|(\.net)|(\.org)|(\.info)|(\.edu)|(\.mil)|(\.gov)|(\.biz)|(\.ws)|(\.us)|(\.tv)|(\.cc)|(\.aero)|(\.arpa)|(\.coop)|(\.int)|(\.jobs)|(\.museum)|(\.name)|(\.pro)|(\.travel)|(\.nato)|(\..{2,3})|(\..{2,3}\..{2,3}))$)]]></param>  
                 <message>邮箱不合法</message>  
            </field-validator>  
        </field>  
          
        <field name="registed_date">  
            <field-validator type="date">  
                 <param name="min">1970-01-01</param>  
                 <param name="max">2019-01-01</param>  
                 <message>注册日期不合法</message>  
            </field-validator>  
        </field>  
    </validators>

 

分享到:
评论
1 楼 lycccxzt 2016-03-21  
 

相关推荐

    Struts2表单验证

    本文将深入探讨Struts2的表单验证机制。 首先,Struts2的输入验证分为两种方式:手动验证和使用验证框架。 **手动验证**主要包括两种方法: 1. **重写validate()方法**:这是最基础的方式,所有Action类都需要继承...

    struts的表单验证

    在Struts框架中,表单验证通常通过两个主要方式实现:客户端验证和服务器端验证。 1. 客户端验证: 客户端验证发生在用户的浏览器上,通常使用JavaScript或jQuery等库来执行。这种方式可以即时反馈错误,提高用户...

    struts2官方例子7-表单验证 xml形式的验证

    在Struts2中,表单验证是非常重要的一个环节,它确保了用户输入的数据符合预设的规则,从而保证了应用程序的数据质量和安全性。本示例主要讲解的是使用XML文件进行表单验证的方法。 首先,让我们理解表单验证的基本...

    struts2 表单验证 注册

    在Struts2中,表单验证是一个重要的功能,它确保了用户输入的数据符合我们设定的规则,从而提高应用程序的健壮性和用户体验。在注册场景中,表单验证尤为重要,因为它涉及到用户账户的安全性。 首先,让我们深入...

    struts2 表单验证验证信息显示位置及效果

    这篇博客文章“Struts2 表单验证验证信息显示位置及效果”探讨了如何有效地实现和展示Struts2中的表单验证信息。 首先,Struts2提供了一种灵活的验证机制,包括Action级别的校验和ValidatorForm级别的校验。Action...

    Struts动态表单验证

    2. **表单验证的重要性** 表单验证是Web应用中必不可少的一环,用于确保用户提交的数据符合预设的规则,防止无效或恶意的数据进入系统。动态表单验证允许我们根据不同的场景或用户角色灵活地调整验证规则。 3. **...

    Struts2极速表单验证框架(注解)

    本篇将详细介绍Struts2的极速表单验证框架,特别是其注解方式的使用。 ### 1. 表单验证的重要性 在Web应用程序中,验证用户输入的数据是必不可少的,因为不正确的数据可能导致业务逻辑错误,甚至安全漏洞。Struts2...

    关于struts表单验证

    在Struts框架中,表单验证是一个关键环节,确保从用户端接收到的数据准确无误,符合应用的要求。本文将详细讲解Struts中的表单验证机制,包括ActionForm Bean的使用、validate()方法和reset()方法,以及如何处理验证...

    struts2表单验证

    在Struts2中,表单验证是处理用户输入数据的重要部分,确保数据的完整性和正确性。下面将详细讨论Struts2中的表单验证及其相关知识点。 一、Struts2表单验证概述 Struts2的表单验证分为客户端验证和服务器端验证。...

    struts的表单验证方式

    在Struts中,表单验证是确保用户输入数据有效性和安全性的关键环节。以下将详细说明Struts如何进行表单验证。 1. **创建ActionForm** 在Struts中,表单数据通常封装在ActionForm对象中。你可以使用Eclipse等IDE...

    李顺利Struts2表单验证后回显错误信息 标签使用

    总结来说,通过学习李顺利老师的Struts2表单验证后回显错误信息的教程,我们可以有效地利用Struts2提供的标签和OGNL表达式来创建用户友好的错误提示,提升Web应用的用户体验。同时,通过自定义样式和利用拦截器,...

    struts2登陆验证

    Struts2是一个强大的Java EE应用程序框架,主要用于构建企业级Web应用程序。它的核心是Action和Result,提供MVC(Model-View-Controller)架构模式,帮助开发者实现清晰的业务逻辑和视图分离。在Struts2中,登录验证...

    Struts动态表单验证Demo视频

    在Struts框架中,动态表单验证是一个关键特性,用于确保用户输入的数据符合业务规则,从而提高应用的安全性和用户体验。 动态表单验证指的是在运行时根据业务需求动态地生成验证规则,而不是静态地硬编码在程序中。...

    Struts2表单标签使用范例

    在处理表单验证方面,Struts2允许我们在Action类中定义字段级和Action级的验证规则。例如,我们可以使用注解`@Size`来限制用户名的长度: ```java public class UserAction extends ActionSupport { @Size(min = 5...

    整合了struts2 jquery的formValidator表单验证的页面代码

    在"整合了struts2 jquery的formValidator表单验证的页面代码"这个项目中,开发者可能采用了以下步骤: 1. **引入依赖**:首先,需要在HTML页面中引入Struts2的相关JSP标签库,同时引入jQuery库和formValidator的...

    在Eclipse中配置Struts2项目(html)手把手教会你 +struts2 标签库介绍(html) + STRUTS2学习文档.pdf + Struts2―表单验证validate(html) + struts2和struts的比较 + struts教程(html)

    在Eclipse中配置Struts2...Struts2―表单验证validate(html)对validate的type属性校验类型以及param 做了详细的解释说明。 struts2和struts的比较 让你更清楚的知道struts2和struts的不同之处。 struts教程(html)

    struts表单验证讲解视频教程

    一、Struts表单验证概述 在Struts中,表单验证通常是通过ActionForm对象来实现的。ActionForm是业务逻辑层和表现层之间的桥梁,用于收集和验证用户输入的数据。当用户提交表单时,这些数据会被封装到ActionForm对象...

    如何自定义Struts2表单验证后的错误信息显示格式/样式

    在Struts2框架中,表单验证是保证数据正确性和完整性的重要环节。默认情况下,当表单验证失败时,Struts2会返回错误消息,并在页面上以特定的格式显示这些错误。然而,这种默认的错误信息显示可能不符合每个开发者或...

    struts2 表单标签的使用

    此外,Struts2表单标签还可以与其他标签结合使用,如`&lt;s:actionerror&gt;`、`&lt;s:fielderror&gt;`和`&lt;s:property&gt;`,以显示验证错误信息或动态显示数据。`&lt;s:actionerror&gt;`显示全局错误,`&lt;s:fielderror&gt;`显示特定字段的...

    struts结合js的表单验证

    本文将详细介绍如何在 Struts2 框架中利用 JavaScript(JS)进行客户端表单验证,并结合实际代码示例来解释具体的实现方式。 #### 一、基本概念 Struts2 是一个基于 Java 的企业级应用框架,它支持多种技术栈,...

Global site tag (gtag.js) - Google Analytics