您的位置:首页 > 编程语言 > Java开发

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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐