struts2自成定义校验器的使用
2016-06-19 14:50
447 查看
很多人在学习struts2的自定义校验器的时候总是走不通,我自己也有过这样的痛苦,网上百度了很多,但是还是没有找到合适的资料帮助自己(因为我是小白)我在这里自己总结一下,下面是struts2内建校验器(就是有点印象,不用详细看)位于xwork-2.0.4.jar压缩包中( com.opensymphony.xwork2.validator.validators)有个文件default.xml ,该文件中定义了Struts2框架内建的校验器。default.xml文件定义了常用的校验器类型。
第一步,写一个校验器类,要实现自定义校验器,需要要继承FieldValidatorSupport这个类
上述两步已经建立好了自定义校验器,怎么去使用呢,下面就是使用
下面是一个jsp页面
建立一个action类
在与Action类同一个层级下建立Action类名-validation.xml文件,这个命名是有规范的,-前面的是你写的Action类名,后面写validation,这个是规定 的,从上面的那个action类
,就知道 我所写的xml 为MyValidatorAction-validation.xml,代码如下:
上面校验器是校验如果前端标签里面name属性为userName的值不等于校验器类中 str属性值 admin时就会弹出提示信息“联系人必须为admin”
最后肯定要配置sturts.xml文件了
部署好项目就可以运行起来了。
提交前
![](https://img-blog.csdn.net/20160619145250456?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
点击“提交”后
![](https://img-blog.csdn.net/20160619145443848?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
有什么问题可以留言,尽量解答,
<validators> <validator name="required" class="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator"/> <validator name="requiredstring" class="com.opensymphony.xwork2.validator.validators.RequiredStringValidator"/> <validator name="int" class="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator"/> <validator name="long" class="com.opensymphony.xwork2.validator.validators.LongRangeFieldValidator"/> <validator name="short" class="com.opensymphony.xwork2.validator.validators.ShortRangeFieldValidator"/> <validator name="double" class="com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator"/> <validator name="date" class="com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator"/> <validator name="expression" class="com.opensymphony.xwork2.validator.validators.ExpressionValidator"/> <validator name="fieldexpression" class="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator"/> <validator name="email" class="com.opensymphony.xwork2.validator.validators.EmailValidator"/> <validator name="url" class="com.opensymphony.xwork2.validator.validators.URLValidator"/> <validator name="visitor" class="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator"/> <validator name="conversion" class="com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator"/> <validator name="stringlength" class="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator"/> <validator name="regex" class="com.opensymphony.xwork2.validator.validators.RegexFieldValidator"/> <validator name="conditionalvisitor" class="com.opensymphony.xwork2.validator.validators.ConditionalVisitorFieldValidator"/> </validators>上面内建校验器其实想说明两点,第一点,校验器其实也就是java类,第二点,注册校验器的validator标签里面有一个name属性,还有一个class属性,其中name是给标签起个名字,class是哪个校验器java类。现在你有点头绪了吧。那下面是真正写一个自定义校验器类,
第一步,写一个校验器类,要实现自定义校验器,需要要继承FieldValidatorSupport这个类
package com.action; import com.opensymphony.xwork2.validator.ValidationException; import com.opensymphony.xwork2.validator.validators.FieldValidatorSupport; public class MyValidator extends FieldValidatorSupport{ private String str; @Override public void validate(Object obj) throws ValidationException { String userName = super.getFieldName(); String value = super.getFieldValue(userName, obj).toString(); if(!str.equals(value)){ super.addFieldError(super.getFieldName(), obj); } } public String getStr() { return str; } public void setStr(String str) { this.str = str; } }第二步在项目根目录下(src)建立validators.xml文件,我不知道这个命名是不是一定要这个命名(不知道是否为规范,我也没深究,不过大部分人都这样命名,你可以自行把命名文件改了看能否走得通,但我个经历如果你把这validators.xml改了名字后在重新部署项目的时候会报错,报什么错,我估计你在走通后改了文件的命名,你自己在控制台看报错信息也能看得懂的)validators.xml的文件内容如下
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator Config 1.0//EN" "http://struts.apache.org/dtds/xwork-validator-config-1.0.dtd"> <!-- 注册给框架 --> <validators> <validator name="test" class="com.action.MyValidator"></validator> </validators>还记得我在文章开头粘贴sturts2内建的效验器的写法吗?同样的结构,有 name属性, class属性,其中这个name属性里面的值你可以自己定义,类似一个id的值用来作标识使用。
上述两步已经建立好了自定义校验器,怎么去使用呢,下面就是使用
下面是一个jsp页面
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@ taglib prefix="s" uri="/struts-tags" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>自定义校验器</title> </head> <body> <h4>添加联系人</h4> <s:form action="myValidatorAction" method="post"> <s:textfield label="联系人姓名" name="userName"></s:textfield> <s:textfield label="联系人电话" name="userTelephone"></s:textfield> <s:textfield label="联系人地址" name="userAddress"></s:textfield> <s:submit value="提交"></s:submit> </s:form> </body> </html>
建立一个action类
package com.action; import com.opensymphony.xwork2.ActionSupport; public class MyValidatorAction extends ActionSupport{ private String userName; private String userTelephone; private String userAddress; public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getUserTelephone() { return userTelephone; } public void setUserTelephone(String userTelephone) { this.userTelephone = userTelephone; } public String getUserAddress() { return userAddress; } public void setUserAddress(String userAddress) { this.userAddress = userAddress; } public String execute(){ return SUCCESS; } }
在与Action类同一个层级下建立Action类名-validation.xml文件,这个命名是有规范的,-前面的是你写的Action类名,后面写validation,这个是规定 的,从上面的那个action类
,就知道 我所写的xml 为MyValidatorAction-validation.xml,代码如下:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.2//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd"> <validators> <field name="userName"> <field-validator type="test"> <param name="str">admin</param> <message>联系人必须为admin</message> </field-validator> </field> </validators>
上面校验器是校验如果前端标签里面name属性为userName的值不等于校验器类中 str属性值 admin时就会弹出提示信息“联系人必须为admin”
最后肯定要配置sturts.xml文件了
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <constant name="struts.i18n.encoding" value="utf-8"></constant> <package name="default" extends="struts-default"> <action name="myValidatorAction" class="com.action.MyValidatorAction"> <result name="input">/myValidator.jsp</result> <result name="success">/myValidator.jsp</result> </action> </package> </struts>下面是我的src下目录 结构
部署好项目就可以运行起来了。
提交前
点击“提交”后
有什么问题可以留言,尽量解答,
相关文章推荐
- Struts - 标签库
- struts1.0于struts2.0的比较
- Struts2中关于namespace的学习心得
- Struts2----自定义action的学习心得
- HTTP Status 404 - There is no Action mapped for namespace [/] and action name [login!welcome] associ
- struts2
- SSH学习笔记---struts2 spring集成时action的class的值
- ssh--问题记录
- 文章标题 使用ajaxFileupload+struts2完成文件的上传以及回显到jsp的链接地址
- struts 学习笔记
- Struts2 的基本配置
- struts2框架架构流程
- struts2.0拦截器(实现未登录的用户不能访问系统的页面)(转)
- Struts2 面试题分析
- Struts2+jQuery+JSON实现异步交互
- 软件开发疑惑解答
- ajax ssh 整合
- 关于struts2框架学习
- struts2 @Action给方法注解
- struts2学习笔记