struts2-18基于XML配置方式实现对action的所有方法或指定方法进行输入校验
2017-12-17 20:35
1046 查看
基于XML配置方法实现对action所有方法的输入验证:
使用基于XML配置方式实现输入校验时,Action也需要继承ActionSupport,并提供校验文件,校验文件和action类放在同一个包下,文件的取名格式为:ActionClassName-validation.xml,其中ActionClassName为action的简单类名,-validation.xml为固定写法。如果Action类为cn.gz.UserAction,那么该文件的取名为:UserAction-validation.xml,下面是校验文件的模版:<?xml version="1.0" encoding="UTF-8"?> <!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="username"> <field-validator type="requiredstring"> <param name="trim">true</param> <message>用户名不能为空!</message> </field-validator> </field> </validators>
指定action中要校验的属性,指定校验器,上面指定的校验器requiredstring是由系统提供的,系统提供了能满足大部分校验需要的校验器,这些校验器的定义可以在xwork-2.x.jar中的com.opensymphony.xwork2.validator.validators下的default.xml中找到。为校验失败后的提示信息。如果需要国际化的话,可以为message指定key属性,key的值为资源文件中的key。在这个校验文件中,对action中字符串类型的username属性进行校验,首先要求调用trim()方法去掉空格,然后判断用户名是否为空。
struts2提供的校验器列表:
required:必填校验器,要求field的值不能为null。requiredstring:必填字符串校验器,要求field的值不能为null,并且长度大于0,默认情况下会对字符串去前后空格。
stringlength:字符串长度校验器,要求field长度必须在指定的范围内,否则校验失败,minlength参数指定最小长度,maxlength参数指定最大长度,trim参数指定校验field之前是否去除字符串前后的空格。
regex:正则表达式校验器,检查被检验的field是否匹配一个正则表达式,expression参数指定正则表达式,caseSensitive参数指定进行正则表达式匹配时,是否区分大小写,默认值为true。
int:整数校验器,要求field的整数值必须在指定范围内,min指定最小值,max指定最大值。
double:双精度浮点数校验器,要求field的双精度浮点数必须在一定的范围内容,min指定最小值,max指定最大值。
fieldexpression:字段OGNL表达式校验器,要求field值满足一个OGNL表达式,expression参数指定OGNL表达式,该逻辑值基于ValueStack进行求值,返回true时校验通过,否则不通过。
email:邮件地址校验器,要求如果field值非空,则必须是合法的邮件格式。
url:网址校验器,要求如果field的值非空,则必须是合法的URL地址。
date:日期校验器,要求field的日期值必须在指定的范围内,min指定最小值,max指定最大值。
conversion:转换校验器,指定在类型转换失败是,提示的错误信息。
visitor:用于校验action中的复合属性,它指定一个校验文件用于校验复合属性中的属性。
expression:OGNL表达式校验器,expression参数指定ognl表达式,该逻辑表达式基于ValueStack进行求值,返回true时校验通过,否则不通过,该校验器不可用在字段校验器风格的配置中。
校验器的使用例子:
required必填校验器:
<field-validator type = "required"> <message>性别不能为空!</message> </field-validator>
requiredstring必填字符串校验器:
<field-validator type = "requiredstring"> <param name = "trim">true</param> <message>用户名不能为空。</message> </field-validator>
stringlength:字符串长度校验器
<field-validator type = "stringlength"> <param name = "maxLength">8</param> <param name = "minLength">2</param> <param name = "trim">true</param> <message><![CDATA[长度应在2-8个字符长度之间]]></message> </field-validator>
email邮件校验器:
<field-validator type = "email"> <message>电子邮件地址无效</message> </field-validator>
regex正则表达式校验器:
<field-validator type = "regex"> <param name = "expression"><![CDATA[^1[358]\d{9}$]]></param> <message>手机格式不正确</message> </field-validator>
编写校验文件,不能出现帮助信息时:
在编写ActionClassName-validator.xml校验文件时,如果出现不了帮助信息,可以按一下方法解决:Windows-》preferences-〉myeclipse-》files and editors-〉XML-》XMLcatalog点“add”,在出现的窗口中的location中选“File system”,然后在xwork-2.1.2.jar解压的目录的src\java目录中选择xwork-validator-1.0.3.dtd,回到设置窗口时不要急着关闭窗口,应把窗口中的key Type改为URI。key改为:http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd
例子:
struts.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <package name="person" namespace="/person" extends="struts-default"> <action name="manage_*" class="cn.gz.action.PersonAction" method="{1}"> <result name="input">/index.jsp</result> <result name="message">/WEB-INF/page/message.jsp</result> </action> </package> </struts>
PersonAction-validation.xml:
<?xml version="1.0" encoding="UTF-8"?> <!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="username"> <field-validator type="requiredstring"> <param name="trim">true</param> <message>用户名不能为空!</message> </field-validator> </field> <field name="mobile"> <field-validator type="requiredstring"> <message>手机号不能为空!</message> </field-validator> <field-validator type="regex"> <param name="expression"><![CDATA[^1[358]\d{9}$]]></param> <message>手机号格式不正确!</message> </field-validator> </field> </validators>
PersonAction.java:
package cn.gz.action; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; public class PersonAction extends ActionSupport{ private String username; private String mobile; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getMobile() { return mobile; } public void setMobile(String mobile) { this.mobile = mobile; } public String update(){ ActionContext.getContext().put("message", "更新成功"); return "message"; } public String save(){ ActionContext.getContext().put("message", "保存成功"); return "message"; } }
index.jsp:
<%@ page language="java" pageEncoding="UTF-8"%> <%@ taglib uri="/struts-tags" prefix="s"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>输入校验</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> </head> <body> <s:fielderror/> <form action="${pageContext.request.contextPath}/person/manage_update.action" method="post"> 用户名:<input type="text" name="username"/>不能为空 dda0 <br/> 手机号:<input type="text" name="mobile"/>不能为空,并且要符合手机号的格式1,3/5/8,后面是9个数字<br/> <input type="submit" value="提 交"/></form> </body> </html>
message.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>结果</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> </head> <body> ${message } </body> </html>
基于XML配置方式实现对action的指定方法进行输入校验
当检验文件取名为ActionClassName-validation.xml时,是对所有方法进行输入校验。如果只是对action中的某个方法进行输入校验的话,则校验文件应该取名为ActionClassName-ActionName-validation.xml,其中ActionName为struts.xml文件中Action的名称。例如:在实际中,常有以下的配置:<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <package name="person" namespace="/person" extends="struts-default"> <action name="manage_*" class="cn.gz.action.PersonAction" method="{1}"> <result name="input">/index.jsp</result> <result name="message">/WEB-INF/page/message.jsp</result> </action> </package> </struts>
PersonAction中有两个方法:
public String add() throws Exception{ ...... } public String update() throws Exception{ ...... }
要对add()方法进行校验,则校验文件应取名为:PersonAction-manage_add-validation.xml
要对update()方法进行验证,则校验文件应取名为:PersonAction-manage_update-validation.xml
基于XML校验的一些特点:
当为某个action提供了ActionClassName-validation.xml和ActionClassName-ActionName-validation.xml两种规则的校验文件时,系统按照下面的顺序寻找校验文件:1、ActionClassName-validation.xml
2、ActionClassName-ActionName-validation.xml
系统寻找到第一个校验文件时,会继续搜索后面的校验文件,当搜索到所有校验文件时,会把校验文件里的所有校验规则汇总,然后全部应用与action方法的校验。如果两个校验文件中指定的校验规则冲突,则只使用后面文件中的校验规则。
当action继承了另一个action,父类action的校验文件会先被搜索到。
假设UserAction继承BaseAction:
<action name = "user" class = "cn.gz.action.UserAction" method = "{1}"> </action>
访问上面的action,系统先搜索父类的校验文件:BaseAction-validation.xml,BaseAction-user-validation.xml ,接着搜索子类的校验文件:UserAction-validation.xml,UserAction-user-validation.xml.应用于上面action的校验规则为这四个文件的总和。
例子:
struts.xml:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <package name="person" namespace="/person" extends="struts-default"> <action name="manage_*" class="cn.gz.action.PersonAction" method="{1}"> <result name="input">/index.jsp</result> <result name="message">/WEB-INF/page/message.jsp</result> </action> </package> </struts>
PersonAction-manage_update-validation.xml:[与PersonAction在同一个包下]
<?xml version="1.0" encoding="UTF-8"?> <!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="username"> <field-validator type="requiredstring"> <param name="trim">true</param> <message>用户名不能为空!</message> </field-validator> </field> <field name="mobile"> <field-validator type="requiredstring"> <message>手机号不能为空!</message> </field-validator> <field-validator type="regex"> <param name="expression"><![CDATA[^1[358]\d{9}$]]></param> <message>手机号格式不正确!</message> </field-validator> </field> </validators>
PersonAction:
package cn.gz.action; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; public class PersonAction extends ActionSupport{ private String username; private String mobile; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getMobile() { return mobile; } public void setMobile(String mobile) { this.mobile = mobile; } public String update(){ ActionContext.getContext().put("message", "更新成功"); return "message"; } public String save(){ ActionContext.getContext().put("message", "保存成功"); return "message"; } }
index.jsp:
<%@ page language="java" pageEncoding="UTF-8"%> <%@ taglib uri="/struts-tags" prefix="s"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>输入校验</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> </head> <body> <s:fielderror/> <form action="${pageContext.request.contextPath}/person/manage_save.action" method="post"> 用户名:<input type="text" name="username"/>不能为空<br/> 手机号:<input type="text" name="mobile"/>不能为空,并且要符合手机号的格式1,3/5/8,后面是9个数字<br/> <input type="submit" value="提 交"/></form> </body> </html>
message.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>结果</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> </head> <body> ${message } </body> </html>
相关文章推荐
- Struts2基于XML配置方式实现对action的所有方法进行输入校验
- 基于XML配置方式实现对action的所有方法和指定方法进行输入校验
- 转载 - Struts2基于XML配置方式实现对action的所有方法进行输入校验
- 基于xml配置方式实现对action中指定方法进行输入校验
- Struts2_基于XML配置方式实现对action的所有方法进行校验
- 基于XML配置方式实现对action的所有方法进行输入校验
- 复习struts2之基于XML配置方式实现对action的所有方法进行校验
- 基于xml配置方式实现对action中指定方法进行输入校验
- Struts2_基于XML配置方式对指定action方法实现输入校验、基于XML校验的一些特点
- Struts2 基于XML配置方式实现对action的所有方法进行校验
- 基于XML配置方式实现对action的所有方法进行校验
- Struts2学习笔记(十四):基于XML配置方式实现对action的所有方法进行校验
- 基于XML配置方式实现对action的所有方法进行校验
- 第二十二章 基于XML配置方式实现对action的所有方法进行校验
- Struts2基于XML配置方式实现对Action方法进行校验
- struts2基于XML配置方式对指定action方法进行校验
- 【Struts2学习笔记(11)】对action的输入校验和XML配置方式实现对action的所有方法进行输入校验
- 基于XML配置方式对指定action方法实现输入校验
- 【Struts2学习笔记(11)】对action的输入校验和XML配置方式实现对action的全部方法进行输入校验
- 学习笔记------------------对Action中所有方法进行输入校验和对指定方法输入校验(手工编写代码和xml方式)