Struts2系统学习(14)输入校验-基于XML配置方式实现校验
2015-11-14 11:32
639 查看
14. 输入校验
在struts2中,我们可以实现对action的所有方法进行校验或者对action的指定方法进行校验。对于输入校验,struts2提供了两种实现方法:
1. 采用手工编写代码实现。
2. 基于XML配置方式实现。
3. 采用Annotations配置方式实现(deprecated)。
这一节,主要讨论基于XML配置方式实现校验。
14.1 对action所有方法进行校验
使用基于XML配置方式实现输入校验时,Action也需要继承ActionSupport,并且提供校验文件,校验文件和action类放在同一个包下,文件的取名格式为:ActionClassName-validation.xml,其中ActionClassName为action的简单类名,-validation为固定写法。如果Action类为com.markliu.UserAction,那么该文件的取名应为:UserAction-validation.xml,放在com.markliu包下。校验文件模板可以从struts示例代码中复制(不过会出现些小问题,下面有分析),推荐dtd文件使用1.0.3版本。下面是校验文件的模版:
[code]<?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"> <!-- trim默认为true --> <param name="trim">true</param> <message>用户名不能为空!</message> </field-validator> </field> </validators>
<field>指定action中要校验的属性,
<field-validator>指定校验器,上面指定的校验器
requiredstring是由系统提供的,系统提供了能满足大部分验证需求的校验器,这些校验器的定义可以在xwork-2.x.jar中的
com.opensymphony.xwork2.validator.validators下的default.xml中找到。
<message>为校验失败后的提示信息,如果需要国际化,可以为message指定key属性,key的值为资源文件中的key。
在这个校验文件中,对action中字符串类型的username属性进行验证,首先要求调用trim()方法去掉空格,然后判断用户名是否为空。
案例一:对action中的save和execute方法进行校验用户的输入,username不能为空,phone不能为空且符合格式要求。
(1)用户输入input.jsp:
[code]<s:fielderror /> <form action="/Struts2Study/day06/xmlValidator.action" method="post"> username:<input type="text" name="username"/><br> phone: <input type="text" name="phone"/><br> <input type="submit" value="注册"> </form>
(2)对action的save和execute方法进行校验:
[code]package com.markliu.day06.validator; import com.opensymphony.xwork2.ActionSupport; public class LoginAction extends ActionSupport { private String username; private String phone; private String message; // 省略了set和get方法 public String save() { this.message = "save成功!"; return "message"; } public String execute() { this.message = "execute成功!"; return "message"; } }
(3)在com.markliu.day06.validator包下建立LoginAction-validation.xmlLoginAction-validation.xml文件:
[code]<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.3//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd"> <validators> <field name="username"> <field-validator type="requiredstring"> <param name="trim">true</param> <message>username不能为空!</message> </field-validator> </field> <field name="phone"> <field-validator type="requiredstring"> <!-- trim默认为true,可省略 --> <param name="trim">true</param> <message>phone不能为空!</message> </field-validator> <field-validator type="regex"> <!-- 注意2.1版的name为expression,具体的需要查看regex校验器对应的类RegexFieldValidator --> <param name="regex"><![CDATA[^1[358]\d{9}$]]></param> <message>phone格式错误!</message> </field-validator> </field> </validators>
发现的问题:如果采用struts2示例代码的配置模板,即:
[code]<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.3//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd">
会出现以下错误:
[code]The file cannot be validated as the XML definition "http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd" that is specified as describing the syntax of the file cannot be located.
说明根据此dtd文件不能被加载(浏览器访问报404错误)!根本的解决方案就是查看xwork-validator-1.0.3.dtd的说明:
[code]<?xml version="1.0" encoding="UTF-8"?> <!-- XWork Validators DTD. Used the following DOCTYPE. <!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.3//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd"> --> <!ELEMENT validators (field|validator)+> ...
文档中明确说明了使用如下DOCTYPE:
[code] <!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.3//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
(4)配置struts2.xml,并为result提供input.jsp视图:
[code]<package name="day06" namespace="/day06" extends="struts-default"> <action name="xmlValidator" class="com.markliu.day06.validator.LoginAction" method="save"> <result name="message">/pages/day06/message.jsp</result> <result name="input">/pages/day06/input.jsp</result> </action> </package>
14.2 对action的指定方法进行校验
当校验文件的取名为ActionClassName-validation.xml时,会对action中的所有处理方法实现输入校验。如果只需要对action中的某个action方法实施校验,那么,校验文件的取名应为:ActionClassName-ActionName-validation.xml,其中ActionName为struts.xml中action的名称,如果采用通配符访问,则需要访问action的具体名称。例如:在实际应用中,常有以下配置:[code]<action name="user_*" class="com.markliu.action.UserAction" method="{1}“ > <result name="success">/WEB-INF/page/message.jsp</result> <result name="input">/WEB-INF/page/addUser.jsp</result> </action>
UserAction 中有以下两个处理方法:
[code]public String add() throws Exception{ //... } public String update() throws Exception{ //... }
要对add()方法实施验证,校验文件的取名为: UserAction-user_add-validation.xml;
要对update()方法实施验证,校验文件的取名为: UserAction-user_update-validation.xml
14.3 Visitor内建校验器(补充)
Visitor校验器主要用于校验Action里的复合属性,如一个Action里面包含了User类型的属性。假设User类包含了username和password属性,为了验证Action里User类的username和password属性输入值是否有效,就可以使用Visitor校验器。通常情况下可以使用
action名-方法名-validation.xml来校验;如此例需要验证User类,则需要添加一个
User-上下文名-validation.xml来配置,且
User-上下文名-validation.xml文件必须与User类在同一个包中。
基本案例测试:
(1)struts.xml文件配置:
[code] <package name="day09" namespace="/day09" extends="struts-default"> <action name="fuheValidation" class="com.markliu.day09.FuHeValidationAction" method="execute"> <result name="success">/pages/day09/message.jsp</result> <result name="input">/pages/day09/login.jsp</result> </action> </package>
(2)FuHeValidationAction请求处理类:
[code]package com.markliu.day09; import com.markliu.day09.bean.User; import com.opensymphony.xwork2.ActionSupport; public class FuHeValidationAction extends ActionSupport { private static final long serialVersionUID = -7433392781263108584L; private User user; public User getUser() { return user; } public void setUser(User user) { this.user = user; } }
(3)User类:
[code]package com.markliu.day09.bean; public class User { private String username; private String phone; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } }
(4)在FuHeValidationAction所在包下创建FuHeValidationAction-validation.xml:
[code]<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.3//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd"> <validators> <!-- 校验的Action中的属性 --> <field name="user"> <field-validator type="visitor"> <!-- 指定校验规则文件的context名为usercontext,此名可任意取 --> <param name="context">usercontext</param> <!-- 指定校验失败后提示信息是否添加下面前缀,如果设置为false,则在标签对应的地方不显示错误,需要用fielderrors来显示 --> <param name="appendPrefix">true</param> <!-- 指定校验失败的提示信息前缀 --> <message>错误:</message> </field-validator> </field> </validators>
(5)在User所在包下创建User-usercontext-validation.xml:
[code]<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.3//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd"> <validators> <field name="username"> <field-validator type="requiredstring"> <param name="trim">true</param> <message>username不能为空!</message> </field-validator> </field> <field name="phone"> <field-validator type="requiredstring"> <!-- trim默认为true,可省略 --> <param name="trim">true</param> <message>phone不能为空!</message> </field-validator> <field-validator type="regex"> <param name="regex"><![CDATA[^1[358]\d{9}$]]></param> <message>phone格式错误!</message> </field-validator> </field> </validators>
(6)输入界面:
[code] <s:fielderror /> <form action="/Struts2Study/day09/fuheValidation" method="post"> username:<input name="user.username" type="text"><br> phone:<input name="user.phone" type="text"><br> <input type="submit" value="login"> </form>
转载请注明出处:/article/3620297.html
相关文章推荐
- Jdbc事务以及Spring事务解惑
- java keytool证书工具使用小结
- Spring中InitializingBean接口使用理解
- Struts2系统学习(13)输入校验-采用手工编写代码实现校验
- Java类和对象
- spring事务传播机制
- cvc-complex-type.2.3: Element 'beans' cannot have character [children] 博客分类: Spring
- 0. 尚硅谷_佟刚_JavaWEB_JavaWEB 开发基础
- 凯撒密码的Java语言实现
- Java学习:获取当前类名、方法名
- Java POI 读取Office excel (2003,2007)及相关jar包
- Maven+SpringMVC+MyBatis 上传图片
- spring mvc 图片上传,图片压缩、跨域解决、 按天生成目录 ,删除,限制为图片代码等相关配置
- 五种Spring事务配置的方式
- java.lang.RuntimeException: Missing type parameter
- spring-mvc不拦截静态资源的配置
- Java学习:协变数组和类型擦除(covariant array ; type erasure)
- 深入理解Java接口
- java.net.SocketException: select failed异常的解决方法
- java项目打成jar包时引用了第三方jar,此时我们该如何解决呢