struts2_12_struts2中的输入校验
2014-08-24 23:00
393 查看
(一)采用手工编写代码实现校验:
通过重写validate()方法实现,validate()方法会校验action中的所有与execute方法签名相同的方法,当某个数据校验失败时,应该调用addFileError()方法往系统的fieldErrors添加校验失败信息(为了使用addFileError()方法,action可以继承actionSupport),如果系统的fileError包含失败信息,struts2会将请求转发到名为input的result中,跳转回登录页面,在show.jsp视图中可以显示成功时的信息。
在index.jsp页面中使用标签<s:fielderror/>显示失败信息。
1)struts中的代码:
2)Action类中的方法:
3)输入页面index.jsp中的代码:
4)显示层show.jsp中的代码:
注:若Action中的拦截方法写为
此时只对action中的这一种方法进行校验。
当action中同时存在validate()方法和validateMethodName()方法时,将先调用validateMethodName()方法,然后再调用validate()方法。
输入校验的流程:
1>类型转换器对请求参数执行类型转换,并把转换后的值赋给action中的属性。
2>如果在执行类型转换器的过程中出现异常,系统会将异常保存到
ActionContext中,conversionErrors拦截器将异常信息添加到
fieldErrors里,不管类型转换是否发生异常,都会进入第三步。
3>系统通过反射技术先调用action中的validateMethodName()方法,若该方法
不存在,则调用action中的validate()方法。
4>经过上述步骤,如果系统中的fieldErrors存在错误信息(即存放错误信息
的集合的size大于0),系统将自动请求转发至名称为input的视图。如果系统
中的fieldErrors没有任何错误信息,系统将执行action中的处理方法。
(二)基于XML配置方法对action的校验
1.所有Action方法进行输入校验:
使用基于XML配置方法实现校验时,Action也要继承ActionSupport,并且提供校验文件和Action类放在同一个包下,文件名格式为:ActionClassName-validation.xml,其中ActionClassName为简单类名,-validation.xml为固定写法。校验文件的固定写法:
Struts.xml文件、index.jsp文件、show.jsp文件和(一)中的相同。
1)HelloAction中的代码:
2)校验类的代码:
说明:同一个属性可以使用多条校验。多条校验放在同一个
<field name="校验属性的名字"></field>中。<field>指定Action中要校验的属性, <field-validator>指定校验器,校验器requiredstring表示:该属性为必填字符串。
系统提供了能满足大部分验证需求的校验器,这些校验器,可以xwork-2.x.jar中的com.opensymphony.xwork2.validator.validators下的default.xml中找到。
<message>为校验失败后的提示,如果需要国际化,可以为message指定key属性,key的值为资源文件中的key。
校验器的例子:
1>email:邮件地址校验器
2>regex:正则表达式
3>required:属性必须填写的校验器
4>requiredstring:必填字符串校验器
5>stringlength:字符串长度校验器
6>int:证书校验器
7>字段OGNL表达式校验器
2.对指定的Action方法进行校验:
其它与上面相同,只需更改校验文件格式名:
ActionClassName-actionNameMethodName-validation.xml,其中
ActionClassName为简单类名,actionNameMethodName为Action的名字和
Action中的要调用方法的名字,-validation.xml为固定写法
注:当为某个Action提供了两种校验规则文件时,系统安先全局后特定的顺序搜索,即搜索到全局校验文件时继续搜索特定的校验文件,然后把里面的所有教研规则汇总,全部应用于Action方法的校验。如果两个校验文件中指定的校验冲突,则使用特定校验文件规则。
当Action继承了某个Action是,父类acting的校验文件会先被搜索到,然后是子类的校验文件,最后汇总应用于Action。
通过重写validate()方法实现,validate()方法会校验action中的所有与execute方法签名相同的方法,当某个数据校验失败时,应该调用addFileError()方法往系统的fieldErrors添加校验失败信息(为了使用addFileError()方法,action可以继承actionSupport),如果系统的fileError包含失败信息,struts2会将请求转发到名为input的result中,跳转回登录页面,在show.jsp视图中可以显示成功时的信息。
在index.jsp页面中使用标签<s:fielderror/>显示失败信息。
1)struts中的代码:
<struts> <package name="packageName" namespace="/test" extends="struts-default"> <action name="hello*" class="test.HelloAction" method="{1}"> <result name="input">/index.jsp</result> <result name="success">/show.jsp</result> </action> </package> </struts>
2)Action类中的方法:
public class HelloAction 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 "success"; } public String save() { ActionContext.getContext().put("message", "保存成功"); return "success"; } public void validate() {// 会对所有方法校验 if (this.username == null || "".equals(this.username.trim())) { this.addFieldError("username", "用户名不能为空"); } if (this.mobile == null || "".equals(this.mobile.trim())) { this.addFieldError("mobile", "手机号不能为空"); } else { if (!Pattern.compile("^1[358]\\d{9}$").matcher(this.mobile) .matches()) { this.addFieldError("mobile", "手机号格式不正确"); } } } }
3)输入页面index.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>input checkout</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> </head> <body> <s:fielderror /> <!-- 使用标签打印错误信息 --> <form action="${pageContext.request.contextPath} /test/hellosave.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>
4)显示层show.jsp中的代码:
<body> ${message } <br> </body>
注:若Action中的拦截方法写为
public void validateMethodName() {}
此时只对action中的这一种方法进行校验。
当action中同时存在validate()方法和validateMethodName()方法时,将先调用validateMethodName()方法,然后再调用validate()方法。
输入校验的流程:
1>类型转换器对请求参数执行类型转换,并把转换后的值赋给action中的属性。
2>如果在执行类型转换器的过程中出现异常,系统会将异常保存到
ActionContext中,conversionErrors拦截器将异常信息添加到
fieldErrors里,不管类型转换是否发生异常,都会进入第三步。
3>系统通过反射技术先调用action中的validateMethodName()方法,若该方法
不存在,则调用action中的validate()方法。
4>经过上述步骤,如果系统中的fieldErrors存在错误信息(即存放错误信息
的集合的size大于0),系统将自动请求转发至名称为input的视图。如果系统
中的fieldErrors没有任何错误信息,系统将执行action中的处理方法。
(二)基于XML配置方法对action的校验
1.所有Action方法进行输入校验:
使用基于XML配置方法实现校验时,Action也要继承ActionSupport,并且提供校验文件和Action类放在同一个包下,文件名格式为:ActionClassName-validation.xml,其中ActionClassName为简单类名,-validation.xml为固定写法。校验文件的固定写法:
Struts.xml文件、index.jsp文件、show.jsp文件和(一)中的相同。
1)HelloAction中的代码:
public class HelloAction 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 "success"; } public String save() { ActionContext.getContext().put("message", "保存成功"); return "success"; } }
2)校验类的代码:
<?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"> <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>
说明:同一个属性可以使用多条校验。多条校验放在同一个
<field name="校验属性的名字"></field>中。<field>指定Action中要校验的属性, <field-validator>指定校验器,校验器requiredstring表示:该属性为必填字符串。
系统提供了能满足大部分验证需求的校验器,这些校验器,可以xwork-2.x.jar中的com.opensymphony.xwork2.validator.validators下的default.xml中找到。
<message>为校验失败后的提示,如果需要国际化,可以为message指定key属性,key的值为资源文件中的key。
校验器的例子:
1>email:邮件地址校验器
<field-validator type="email"> <message>电子邮件地址无效</message> </field-validator>
2>regex:正则表达式
<field-validator type="regex"> <param name="expression"><![CDATA[^1[358]\d{9}$]]></param> <message>手机号格式不正确!</message> </field-validator>
3>required:属性必须填写的校验器
<field-validator type=”required”> <message>提示必须填写的属性</message> </feild-validator>
4>requiredstring:必填字符串校验器
<field-validator type="requiredstring"> //去掉前头和后头的空白字符 <param name="trim">true</param> <message>提示必须填写字符串属性</message> </field-validator>
5>stringlength:字符串长度校验器
<field-validator type=”stringlength”> <param name="maxLength">10</param> <param name="minLength">3</param> //去掉前头和后头的空白字符 <param name="trim">true</param> <message><![CDATA[产品名称应在2-10个字符之间]]></message> </field-validator>
6>int:证书校验器
<field-validator type=”int”> <param name="main">1</param> <param name="max">150</param> <message>年龄必须在1-150之间</message> </field-validator>
7>字段OGNL表达式校验器
<field name="imagefile"> <field-validator type="fieldexpression"> <param name="expression"> <![CDATA[imagefile.length()<=0]]> </param> <message>文件不能为空</message> </field-validator> </field>
2.对指定的Action方法进行校验:
其它与上面相同,只需更改校验文件格式名:
ActionClassName-actionNameMethodName-validation.xml,其中
ActionClassName为简单类名,actionNameMethodName为Action的名字和
Action中的要调用方法的名字,-validation.xml为固定写法
注:当为某个Action提供了两种校验规则文件时,系统安先全局后特定的顺序搜索,即搜索到全局校验文件时继续搜索特定的校验文件,然后把里面的所有教研规则汇总,全部应用于Action方法的校验。如果两个校验文件中指定的校验冲突,则使用特定校验文件规则。
当Action继承了某个Action是,父类acting的校验文件会先被搜索到,然后是子类的校验文件,最后汇总应用于Action。
相关文章推荐
- 传智Struts2笔记(12)输入校验
- Struts2输入校验的流程
- struts2中手动完成输入校验(2)重写validateXXX()方法
- Struts2 输入校验
- Struts2对象集合(批量输入)校验 详解
- Struts2学习笔记2--输入校验
- Struts2-输入校验(重写validate方法)
- Struts2输入校验(五) の FieldError和ActionError的区别
- Struts2:输入校验-基于XML配置方式实现
- struts2学习(14)——输入校验(2)
- Struts2输入校验
- Struts2输入校验以及错误信息处理(2)——用Struts2定义好的校验框架进行校验
- Struts2输入校验
- struts2输入校验
- 笔记:Struts2 输入校验
- struts2基本输入校验
- Struts2的服务器端的四种输入校验方式
- Struts2输入校验总结
- 4.2.7: Struts2的输入校验---校验文件的搜索规则
- struts2的输入校验框架及DTD文件配置