博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Struts2声明式验证
阅读量:4180 次
发布时间:2019-05-26

本文共 3770 字,大约阅读时间需要 12 分钟。

声明式验证步骤

一 、编写Action类

package com.tg.action;import com.opensymphony.xwork2.ActionSupport;public class CheckAction extends ActionSupport {	/**	 * 	 */	private static final long serialVersionUID = 7982435824916880105L;	private int age ;	private String username;		private String email;		public String getEmail() {		return email;	}	public void setEmail(String email) {		this.email = email;	}	public String getUsername() {		return username;	}	public void setUsername(String username) {		this.username = username;	}	public int getAge() {		return age;	}	public void setAge(int age) {		this.age = age;	}	public static long getSerialversionuid() {		return serialVersionUID;	}		@Override	public String execute() throws Exception {		System.out.println("age"+age);		return SUCCESS;	}}

二、在struts.xml中配置该Action

/success.jsp
/validation.jsp

三、编写验证规则的配置文件

 去struts2-blank\WEB-INF\src\java\example 下找到 Login-validation.xml  复制 然后重命名

命名必须为   必须放置在Action类的同目录下

<ActionClassName>-validation.xml 

<ActionClassName>-<ActionAliasName>-validation.xml 
其中<ActionAliasName>就是struts.xml中<ation>的name属性值。

本例子 为 CheckAction-validation.xml

 
 
true
username is required
Must provide a valid email
 
Conversion Error (Integer Wanted)
 

一个Action类可以应答多个action请求 ,多个action 请求使用不同的验证规则 怎么办?

解决方案

        为每个不同的action请求 定义其对应的验证文件:ActionClassName-AliasName-
        validation.xml不带别名的配置文件:ActionClassName-validation.xml
        中的验证规则依然会起作用 可以吧各个action公有的验证规则配置在其中 但需要注意的是
        只适应于某一个action的请求的验证规则就不要再这里
        配置了

如下图

字段验证

字段校验器配置格式:

<field name="被校验的字段">

       <field-validator type="校验器名">

             <!--此处需要为不同校验器指定数量不等的校验规则-->

              <param name="参数名">参数值</param>

                  ....................

               <!--校验失败后的提示信息,其中key指定国际化信息的key-->

                <message key="I18Nkey">校验失败后的提示信息</message>

                 <!--校验失败后的提示信息:建议用getText("I18Nkey"),否则可能出现Freemarker template Error-->

       </field-vallidator>

        <!-- 如果校验字段满足多个规则,下面可以配置多个校验器-->

</field>

非字段验证

非字段校验器配置格式:
<validator type="校验器名">
          <param name="fieldName">需要被校验的字段</param>
          <!--此处需要为不同校验器指定数量不等的校验规则-->         
<param name="参数名">参数值</param>
            <!--校验失败后的提示信息,其中key指定国际化信息的key-->
         <message key="I18Nkey">校验失败后的提示信息</message>
           <!--校验失败后的提示信息:建议用getText("I18Nkey"),否则可能出现Freemarker template Error-->
</validator>

(1)字段校验代码,例如下面的代码:

Xml代码
    <field name="....">  
      <field-validator type="..."></field-validator>  
    </filed>  
(2)非字段校验代码,例如下面的代码:
Xml代码
    <validators>  
        <validator type="required">  
            <param name="fieldName">username</param>  
            <message>用户名必须填写</message>  
        </validator>  
    </validators>  
   struts2的校验大部分是围绕Action组件的字段属性来实现的,主要是判断某个字段属性的输入是否有效,因此又把这种内置的校验器成为字段校验器。还有一种校验器它不是针对某个字段,而是针对多个字段的输入值之间的逻辑关系进行校验,典型的例子是再次输入密码的判断。内置的expression校验器就是一种非字段校验器。
    <validator type="expression">  
            <param name="expression"><![CDATA[(password==repassword)]]></param>  
            <message>两次输入的密码必须完全一致!</message>  
        </validator> 
 
 非字段校验:先指定校验器:由谁来校验,来校验谁!
字段校验器:先指定校验的属性:我来校验谁,由谁来校验!

短路验证

加  short-circuit="true"  表示当前验证器没有通过后 直接返回input视图 不会验证后面的验证器

      
           
                      
Conversion Error (Integer Wanted)
         
                 
short-circuit="true" >                         
20            
50            
Age needs to be between ${min} and ${max}
        
    
    
         
           
true           
username is required
      
   
    
  
     
Must provide a valid email
  
    
     

你可能感兴趣的文章
WebRTC 的 PROXY - 如何解决应用中的线程乱入
查看>>
Android Audio回声消除学习笔记
查看>>
Android AudioRecord和AudioTrack介绍
查看>>
Mac系统升级Git
查看>>
vs2017 编译webrtc warning C4005: “AF_IPX”: 宏重定义的解决办法
查看>>
std::max、std::min error C2589: “(”:“::”右边的非法标记,error C2059: 语法错误:“::”
查看>>
在Ubuntu Server上编译FFmpeg
查看>>
git 切换到远程分支
查看>>
AAC的ADTS头文件信息介绍
查看>>
CMAKE手册
查看>>
Doubango RTP包传输使用UDT可靠传输协议,解决RTP丢包问题
查看>>
Android手机H264软编码参数优化
查看>>
将AAC格式的RTP流存储为可以播放的m4a文件
查看>>
UDT协议-基于UDP的可靠数据传输协议
查看>>
[FFMPEG硬件加速]nvidia方案
查看>>
openal播放裸数据
查看>>
OpenAL对象属性
查看>>
OpenAL 3D效果营造
查看>>
librtmp协议分析---RTMP_SendPacket函数
查看>>
视频学习笔记:Android ffmpeg解码多路h264视频并显示
查看>>