Struts2输入校验
2016-02-05 10:14
417 查看
struts2输入校验主要分为两种
代码实现校验和xml配置文件实现校验
[b] (1)代码实现校验[/b]
1、
对action所有方法进行validate
action需要继承ActionSupport,并在action重写validate()方法,在validate方法中,根据页面的相应
元素名称进行相关校验,如果校验不通过,调用this.fieldError(页面元素name,出错提示信息).
然后返回INPUT对应的视图,视图中使用标签<s:fieldError
name="页面元素名称"/>进行回显,一般INPUT对应的视图资源还是原来的输入页面。比如验证手机号:mobilephone;需要在action里做如下处理:
if(mobilephone==null||"".equals(mobilephone.trim())){
this.addFieldError("手机号码不能为空",mobilephone);
}
else
if(!Pattern.compile("^1[358]//d{9}$").matcher(mobilephone).matches()){
this.addFieldError("手机号格式不对",mobilephone);
}
然后在struts.xml中配置一个<result
name="input">index.jsp</result>
最后从index.jsp页面中通过<s:fielderror/>输出相关的错误信息
前面需要加入struts标签<%@ taglib uri="struts-tags"
prefix="s"%》
###############################或[b]者####################################[/b]
1)在action中,通过[b]this.addFieldError("name",
"name is error");
this.addFieldError("name", "name is too
long"); //定义错误提示信息[/b]
(使用此方法要继承ActionSupport,且此action在struts.xml中不用配置input结果视图)
2)在JSP页面中,查看错误信息
方式一:<!--
以固定的css样式取出错误信息,不方便我们进行相应的处理-->
<s:fielderror
fieldName="name" theme="simple"/>
方式二:<!-- 从存储错误信息的Map中拿数据
-->
<s:property
value="errors.name[0]"/>
<s:property
value="errors.name[1]"/>
<!--
显示详细的栈信息-->
<s:debug></s:debug>
debug中的errors是一个map类型,而name是一个数组,可以在action继续添加错误提示信息
<s:debug></s:debug>可以查看值栈信息
总结:从方式二我们可以看出当action中调用this.addFieldError方法时,值栈和request域中就会添加errors对象,所以我们可以在拦截器中通过request获取errors对象:
HttpServletRequest request =
ServletActionContext.getRequest();
Map
errors =
([b]Map)
request.getAttribute("[/b][b]errors");[/b]
或者
ActionContext context =
actionInvocation.getInvocationContext().getContext();
ValueStack stack =
context.getValueStack();
[b]Map
errors = (Map)
stack.findValue("[/b][b][b]errors[/b]")[/b]
[b]###############################或[/b][b]者####################################[/b]
2、对action中指定方法进行validate
在action中加入validateXXX()方法。(其中XXX是action中指定的方法名)
(2)配置文件实现校验
1、对action所有方法进行validate
编写ActionClassName-validation.xml.
ActionClassName是action对应的简单类名,validation是固定写法,将这个XML文件放在与action同一个包下面,当然action还是要去继承ActionSupport这个类,下
面是配置文件的例子。其中type还有很多~例如email啥的,系统提供了能满足大部分验证需求的校验器,这些校验器的定义可以在xwork-2.x.jar中的com.opensymphony.xwork2.validator.validators下的default.xml中找到,但是校验文件的模板并没有在default.xml中,一定要复制下面的xml中的dtd到校验文件中!!!切记切记!!!。
regist.jsp页面的输入框代码:
<s:form action="UserReg">
<s:textfield name="username"
label="用户名"></s:textfield>
<s:password name="password1"
label="密码"></s:password>
<s:password name="password2"
label="确认密码"></s:password>
<s:textfield
name="age" label="年龄"/>
<sx:datetimepicker name="birthday" label="生日:"
displayFormat="yyyy-MM-dd"></sx:datetimepicker>
<s:textfield name="mobile"
label="手机"></s:textfield>
<s:textfield name="email"
label="邮箱"/>
<s:textfield name="personPage"
label="个人主页"/>
<s:submit value="注册"/>
<s:reset
value="重置"></s:reset>
</s:form>
校验[b]RegistAction-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">[/b]
<validators>
<!-- username字段校验
-->
<field
name="username">
<!--
<field-validator
type="stringlength">
<param
name="minLength">4</param>
<param
name="maxLength">10</param>
<message>用户名长度为${minLength}到${maxLength}之间!</message>
</field-validator>
-->
<field-validator
type="requiredstring">
<param
name="trim">true</param>
<!-- 指定校验失败的提示信息,在[b]INPUT对应的视图[/b][b]regist.jsp显示
-->[/b]
<message
>用户名不能为空!</message>
</field-validator>
<!-- 指定name属性必须匹配正则表达式
,长度位4到20之间-->
<field-validator type="regex">
<param
name="expression"><![CDATA[(\w{4,20})]]></param>
<message>您输入的用户名只能是字母和数字
,且长度必须在4到20之间</message>
</field-validator>
</field>
<!--
password1字段校验 -->
<field
name="password1">
<field-validator
type="requiredstring">
<param
name="trim">true</param>
<message>错误,密码不能为空!</message>
</field-validator>
<field-validator
type="stringlength">
<param
name="minLength">4</param>
<param
name="maxLength">20</param>
<message>用户密码长度为${minLength}到${maxLength}之间!</message>
</field-validator>
</field>
<!--
password2字段校验 -->
<field
name="password2">
<field-validator
type="requiredstring">
<param
name="trim">true</param>
<message>错误,确认密码不能为空!</message>
</field-validator>
<field-validator
type="stringlength">
<param
name="minLength">4</param>
<param
name="maxLength">20</param>
<message>用户密码长度为${minLength}到${maxLength}之间!</message>
</field-validator>
<field-validator
type="fieldexpression">
<param
name="expression">password1==password2</param>
<message>两次输入密码不一样!</message>
</field-validator>
</field>
<!--
指定age属性必须在指定范围内-->
<field name="age">
<field-validator type="int">
<param
name="min">1</param>
<param
name="max">120</param>
<message>年纪必须在${min}到${max}之间</message>
</field-validator>
</field>
<!-- birthday字段校验,页面中是一个时间选择框
-->
<field
name="birthday">
<field-validator type="date">
<param
name="min">1990-01-01</param>
<param
name="max">2011-04-14</param>
<message>错误:生日应该在一个范围内!</message>
</field-validator>
</field>
[b]
<!-- 手机字段校验
-->
[/b]
<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>
[b] <!-- 邮箱字段校验
-->
[/b]
<field
name="email">
<!-- 指定需要校验的字段名为email -->
<field-validator type="email">
<!-- 指定校验失败的提示信息 -->
<message>你输入的邮箱必须是一个有效,如:example@163.com</message>
</field-validator>
</field>
<!-- 指定Url属性的校验 -->
<field name="personPage">
<!-- 指定需要校验的字段名为personPage -->
<field-validator type="url">
<!-- 指定校验失败的提示信息 -->
<message>你输入的个人主页地址必须有效,如:http://www.example.com</message>
</field-validator>
</field>
</validators>
附:
字段OGNL表达式校验器
<field name="imagefile">
<field-validator
type="fieldexpression">
<param
name="expression"><![CDATA[imagefile.length()
<=
0]]></param>
<message>文件不能为空</message>
</field-validator>
</field>
关于struts2的身份证验证请参看:自定义身份证验证
值得注意的一点是:要在xml中写相应的文本必须要:<![CDATA[]]>的格式。。。
[b]如果需要在myeclipse加入XML提示信息:
[/b]
对action中指定方法进行validate
配置文件的名字变为
ActionClassName-actionname_xxx-validation.xml.其中actionname_xxx中
actionname是struts.xml中action的名称,xxx是该action下面的方法,一般使用这种通配符,才能做到校验指定方法。如:
struts.xml中:
<action name="user_*"
class="action.UserAction" method="{1}“ >
<result
name="success">/message.jsp</result>
<result
name="input">/addUser.jsp</result>
</action>
UserAction中有以下两个处理方法:
public String add() throws Exception{
}
public String update() throws Exception{
}
要对add()方法实施验证,校验文件的取名为:
UserAction-user_add-validation.xml
要对update()方法实施验证,校验文件的取名为:
UserAction-user_update-validation.xml
代码实现校验和xml配置文件实现校验
[b] (1)代码实现校验[/b]
1、
对action所有方法进行validate
action需要继承ActionSupport,并在action重写validate()方法,在validate方法中,根据页面的相应
元素名称进行相关校验,如果校验不通过,调用this.fieldError(页面元素name,出错提示信息).
然后返回INPUT对应的视图,视图中使用标签<s:fieldError
name="页面元素名称"/>进行回显,一般INPUT对应的视图资源还是原来的输入页面。比如验证手机号:mobilephone;需要在action里做如下处理:
if(mobilephone==null||"".equals(mobilephone.trim())){
this.addFieldError("手机号码不能为空",mobilephone);
}
else
if(!Pattern.compile("^1[358]//d{9}$").matcher(mobilephone).matches()){
this.addFieldError("手机号格式不对",mobilephone);
}
然后在struts.xml中配置一个<result
name="input">index.jsp</result>
最后从index.jsp页面中通过<s:fielderror/>输出相关的错误信息
前面需要加入struts标签<%@ taglib uri="struts-tags"
prefix="s"%》
###############################或[b]者####################################[/b]
1)在action中,通过[b]this.addFieldError("name",
"name is error");
this.addFieldError("name", "name is too
long"); //定义错误提示信息[/b]
(使用此方法要继承ActionSupport,且此action在struts.xml中不用配置input结果视图)
2)在JSP页面中,查看错误信息
方式一:<!--
以固定的css样式取出错误信息,不方便我们进行相应的处理-->
<s:fielderror
fieldName="name" theme="simple"/>
方式二:<!-- 从存储错误信息的Map中拿数据
-->
<s:property
value="errors.name[0]"/>
<s:property
value="errors.name[1]"/>
<!--
显示详细的栈信息-->
<s:debug></s:debug>
debug中的errors是一个map类型,而name是一个数组,可以在action继续添加错误提示信息
<s:debug></s:debug>可以查看值栈信息
总结:从方式二我们可以看出当action中调用this.addFieldError方法时,值栈和request域中就会添加errors对象,所以我们可以在拦截器中通过request获取errors对象:
HttpServletRequest request =
ServletActionContext.getRequest();
Map
errors =
([b]Map)
request.getAttribute("[/b][b]errors");[/b]
或者
ActionContext context =
actionInvocation.getInvocationContext().getContext();
ValueStack stack =
context.getValueStack();
[b]Map
errors = (Map)
stack.findValue("[/b][b][b]errors[/b]")[/b]
[b]###############################或[/b][b]者####################################[/b]
2、对action中指定方法进行validate
在action中加入validateXXX()方法。(其中XXX是action中指定的方法名)
(2)配置文件实现校验
1、对action所有方法进行validate
编写ActionClassName-validation.xml.
ActionClassName是action对应的简单类名,validation是固定写法,将这个XML文件放在与action同一个包下面,当然action还是要去继承ActionSupport这个类,下
面是配置文件的例子。其中type还有很多~例如email啥的,系统提供了能满足大部分验证需求的校验器,这些校验器的定义可以在xwork-2.x.jar中的com.opensymphony.xwork2.validator.validators下的default.xml中找到,但是校验文件的模板并没有在default.xml中,一定要复制下面的xml中的dtd到校验文件中!!!切记切记!!!。
regist.jsp页面的输入框代码:
<s:form action="UserReg">
<s:textfield name="username"
label="用户名"></s:textfield>
<s:password name="password1"
label="密码"></s:password>
<s:password name="password2"
label="确认密码"></s:password>
<s:textfield
name="age" label="年龄"/>
<sx:datetimepicker name="birthday" label="生日:"
displayFormat="yyyy-MM-dd"></sx:datetimepicker>
<s:textfield name="mobile"
label="手机"></s:textfield>
<s:textfield name="email"
label="邮箱"/>
<s:textfield name="personPage"
label="个人主页"/>
<s:submit value="注册"/>
<s:reset
value="重置"></s:reset>
</s:form>
校验[b]RegistAction-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">[/b]
<validators>
<!-- username字段校验
-->
<field
name="username">
<!--
<field-validator
type="stringlength">
<param
name="minLength">4</param>
<param
name="maxLength">10</param>
<message>用户名长度为${minLength}到${maxLength}之间!</message>
</field-validator>
-->
<field-validator
type="requiredstring">
<param
name="trim">true</param>
<!-- 指定校验失败的提示信息,在[b]INPUT对应的视图[/b][b]regist.jsp显示
-->[/b]
<message
>用户名不能为空!</message>
</field-validator>
<!-- 指定name属性必须匹配正则表达式
,长度位4到20之间-->
<field-validator type="regex">
<param
name="expression"><![CDATA[(\w{4,20})]]></param>
<message>您输入的用户名只能是字母和数字
,且长度必须在4到20之间</message>
</field-validator>
</field>
<!--
password1字段校验 -->
<field
name="password1">
<field-validator
type="requiredstring">
<param
name="trim">true</param>
<message>错误,密码不能为空!</message>
</field-validator>
<field-validator
type="stringlength">
<param
name="minLength">4</param>
<param
name="maxLength">20</param>
<message>用户密码长度为${minLength}到${maxLength}之间!</message>
</field-validator>
</field>
<!--
password2字段校验 -->
<field
name="password2">
<field-validator
type="requiredstring">
<param
name="trim">true</param>
<message>错误,确认密码不能为空!</message>
</field-validator>
<field-validator
type="stringlength">
<param
name="minLength">4</param>
<param
name="maxLength">20</param>
<message>用户密码长度为${minLength}到${maxLength}之间!</message>
</field-validator>
<field-validator
type="fieldexpression">
<param
name="expression">password1==password2</param>
<message>两次输入密码不一样!</message>
</field-validator>
</field>
<!--
指定age属性必须在指定范围内-->
<field name="age">
<field-validator type="int">
<param
name="min">1</param>
<param
name="max">120</param>
<message>年纪必须在${min}到${max}之间</message>
</field-validator>
</field>
<!-- birthday字段校验,页面中是一个时间选择框
-->
<field
name="birthday">
<field-validator type="date">
<param
name="min">1990-01-01</param>
<param
name="max">2011-04-14</param>
<message>错误:生日应该在一个范围内!</message>
</field-validator>
</field>
[b]
<!-- 手机字段校验
-->
[/b]
<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>
[b] <!-- 邮箱字段校验
-->
[/b]
<field
name="email">
<!-- 指定需要校验的字段名为email -->
<field-validator type="email">
<!-- 指定校验失败的提示信息 -->
<message>你输入的邮箱必须是一个有效,如:example@163.com</message>
</field-validator>
</field>
<!-- 指定Url属性的校验 -->
<field name="personPage">
<!-- 指定需要校验的字段名为personPage -->
<field-validator type="url">
<!-- 指定校验失败的提示信息 -->
<message>你输入的个人主页地址必须有效,如:http://www.example.com</message>
</field-validator>
</field>
</validators>
附:
字段OGNL表达式校验器
<field name="imagefile">
<field-validator
type="fieldexpression">
<param
name="expression"><![CDATA[imagefile.length()
<=
0]]></param>
<message>文件不能为空</message>
</field-validator>
</field>
关于struts2的身份证验证请参看:自定义身份证验证
值得注意的一点是:要在xml中写相应的文本必须要:<![CDATA[]]>的格式。。。
[b]如果需要在myeclipse加入XML提示信息:
[/b]
对action中指定方法进行validate
配置文件的名字变为
ActionClassName-actionname_xxx-validation.xml.其中actionname_xxx中
actionname是struts.xml中action的名称,xxx是该action下面的方法,一般使用这种通配符,才能做到校验指定方法。如:
struts.xml中:
<action name="user_*"
class="action.UserAction" method="{1}“ >
<result
name="success">/message.jsp</result>
<result
name="input">/addUser.jsp</result>
</action>
UserAction中有以下两个处理方法:
public String add() throws Exception{
}
public String update() throws Exception{
}
要对add()方法实施验证,校验文件的取名为:
UserAction-user_add-validation.xml
要对update()方法实施验证,校验文件的取名为:
UserAction-user_update-validation.xml
相关文章推荐
- JAVA并发编程学习笔记之CAS操作
- 怎么样使用yum来安装、卸载jdk
- ConcurrentHashMap源码分析--Java8
- 表单上传
- 详解Java设计模式编程中的中介者模式
- eclipse报错:Unable to execute dex: Multiple dex files define的解决办法
- eclipse运行程序时报timeout的解决方法
- sts spring JPA(项目安装环境)
- Java入门基础之Java的基本语法与Java所支持的数据类型
- Java NIO原理 图文分析及代码实现
- Java使用javax.mail.jar发送邮件并同意发送附件
- Java中ArrayList和LinkedList差别
- 我的java
- java
- 深入讲解Java编程中类的生命周期
- java中instanceof使用详解
- 使用Eclipse-Maven-git做Java开发(16)--多远端仓库的同步与推送
- 使用Maven运行Java main的3种方式
- Spring 模块
- Spring MVC 流程