struts2输入校验(附ActionName-validate.xml文件中正则表达式不起作用的解决方案),PS:有点问题希望知道的人指点下
2015-04-28 09:21
465 查看
PS:最后附上遇到的疑惑,希望知道的人指点下
前台页面(附代码):
Action部分:
在该action类同一目录下新建一个ActionName-validation.xml, 其中actionName为action类的名称,本例中则为TestPeopleAction-validation.xml。
TestPeopleAction-validation.xml内容如下(附xml文件中正则表达式不起作用的解决方案)
在<field-validator>元素中添加short-circut="true"即可;
当用户验证失败后,在action中返回INPUT,因此我们需要在struts.xml中配置result name值为input的逻辑视图,并在input视图中用<s:fielderror />输出验证消息。
在struts.xml中配置result name值为input的逻辑视图:
实现效果:
用户输入:
响应结果:
以下遇到的问题,希望大家知道的留言给下建议,谢谢!
1.数字验证部分
这里验证用户输入是否为1-150之间的数字,如果用户输入为空的话,也是无法通过该输入验证的。假如我数据库里age这个字段允许为空,不为空的则需要在1-150的区间里,
那么我在这个xml文件里应该怎么写?
2.日期验证部分
且如果这个日期部分为非空的,那我该怎么写呢?
这里我原本准备用
来实现非空的,可最终实现的效果就是虽然能实现非空的效果,但无法实现正常的日期验证了,例如我若输入1000-01-05的话,还是会显示必须输入日期的错误。
希望有所了解的各位在评论里给点建议哈~
前台页面(附代码):
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <form action="testPeopleAction.action" method="post"> <table align="center"> <caption>类型转换的错误处理</caption> <tr> <td>用户名 <input type="text" name="name"></td> </tr> <tr> <td>密码<input type="password" name="password"></td> </tr> <tr> <td>用户年龄<input type="text" name="age"></td> </tr> <tr> <td>用户生日<input type="text" name="birth"></td> </tr> <tr align="center"> <td colspan="2"><input type="submit" value="登录"><input type="reset" value="重填"></td> </tr> </table> </form> </body> </html>
Action部分:
package com.hcj.action; import java.util.Date; import com.opensymphony.xwork2.ActionSupport; public class TestPeopleAction extends ActionSupport { private String name; private String password; private int age; private Date birth; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public Date getBirth() { return birth; } public void setBirth(Date birth) { this.birth = birth; } public TestPeopleAction() { super(); } public String test() throws Exception { // TODO Auto-generated method stub return super.execute(); } }
在该action类同一目录下新建一个ActionName-validation.xml, 其中actionName为action类的名称,本例中则为TestPeopleAction-validation.xml。
TestPeopleAction-validation.xml内容如下(附xml文件中正则表达式不起作用的解决方案)
<?xml version="1.0" encoding="UTF-8"?> <!-- 注意DOCTYPE的地址,并不是http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd --> <!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.3//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd"> <!--校验文件的根元素--> <validators> <!-- 校验action的name属性 --> <field name="name"> <!-- 指定用户名必须满足必填规则 --> <field-validator type="requiredstring"> <param name="trim">true</param> <message>必须输入姓名</message> </field-validator> <!-- 指定name属性必须匹配正则表达式 --> <field-validator type="regex"> <!-- 这里注意下网上大多数人给的demo里这个param里的name参数写的是expression,我调试了好久发现 这样写的话这个正则表达式校验不起作用,后把param里面name参数的值改为regex就好了。 PS:个人猜测可能是版本的问题,如果读者用我这个例子正则表达式不起作用的话,不妨把 param里的name参数再改为expression试试(写法如下): <param name="expression" ><![CDATA[(\w{4,25})]]></param> --> <param name="regex" ><![CDATA[(\w{4,25})]]></param> <message>姓名要在4-25位之间</message> </field-validator> </field> <!-- 校验action的password属性 --> <field name="password"> <!-- 指定用户名必须满足必填规则 --> <field-validator type="requiredstring"> <param name="trim">true</param> <message>必须输入密码</message> </field-validator> <!-- 指定name属性必须匹配正则表达式 --> <field-validator type="regex"> <param name="regex"><![CDATA[(\w{4,25})]]></param> <message>您输入的密码只能是字母和数字,且长度必须在4到25之间</message> </field-validator> </field> <!-- 指定age属性必须在指定范围内 --> <field name="age"> <field-validator type="int" short-circuit="true"> <param name="min">1</param> <param name="max">150</param> <message>输入年龄必须在1到150之间</message> </field-validator> </field> <!-- 指定birth必须在指定范围内 --> <field name="birth"> <field-validator type="date" short-circuit="true"> <!-- 下面指定日期字符串时,必须使用本Locale的日期格式 --> <param name="min">1900-01-01</param> <param name="max">2015-05-01</param> <message>生日必须在${min}到${max}之间</message> </field-validator> </field> </validators>
在<field-validator>元素中添加short-circut="true"即可;
当用户验证失败后,在action中返回INPUT,因此我们需要在struts.xml中配置result name值为input的逻辑视图,并在input视图中用<s:fielderror />输出验证消息。
在struts.xml中配置result name值为input的逻辑视图:
<action name="testPeopleAction" class="com.hcj.action.TestPeopleAction"> <!--定义逻辑视图和物理资源之间的映射 --> <result name="success">/success.jsp</result> <result name="error">/error.jsp</result> <span style="color:#cc0000;"><result name="input">/input.jsp</result></span> </action>在input视图中用<s:fielderror />输出验证消息:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <!-- 导入struts2标签库 --> <%@taglib prefix="s" uri="/struts-tags"%> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <h1>类型转换错误</h1> <!-- 输出类型转换失败提示和校验失败提示 --> <s:fielderror /> </body> </html>
实现效果:
用户输入:
响应结果:
以下遇到的问题,希望大家知道的留言给下建议,谢谢!
1.数字验证部分
<field-validator type="int"> <span style="white-space:pre"> </span><param name="min">1</param> <span style="white-space:pre"> </span><param name="max">150</param> <span style="white-space:pre"> </span><message>输入年龄必须在1到150之间</message> </field-validator>
这里验证用户输入是否为1-150之间的数字,如果用户输入为空的话,也是无法通过该输入验证的。假如我数据库里age这个字段允许为空,不为空的则需要在1-150的区间里,
那么我在这个xml文件里应该怎么写?
2.日期验证部分
<field-validator type="date"> <span style="white-space:pre"> </span><!-- 下面指定日期字符串时,必须使用本Locale的日期格式 --> <span style="white-space:pre"> </span><param name="min">1900-01-01</param> <span style="white-space:pre"> </span><param name="max">2015-05-01</param> <span style="white-space:pre"> </span><message>生日必须在${min}到${max}之间</message> </field-validator>这里日期验证的为1900-01-01到2015-05-01这个区间,但是用户如果输入不是xxxx-xx-xx的格式,则无法显示这个验证错误的消息。
且如果这个日期部分为非空的,那我该怎么写呢?
这里我原本准备用
<field-validator type="requiredstring"> <span style="white-space:pre"> </span><param name="trim">true</param> <span style="white-space:pre"> </span><message>必须输入日期</message> </field-validator>
来实现非空的,可最终实现的效果就是虽然能实现非空的效果,但无法实现正常的日期验证了,例如我若输入1000-01-05的话,还是会显示必须输入日期的错误。
希望有所了解的各位在评论里给点建议哈~
相关文章推荐
- Struts2输入校验以及错误信息处理(1)——用Action中定义的validate()方法进行校验
- Struts2基于XML配置方式实现对action的所有方法进行输入校验
- Struts2 validation.xml 正则表达式不起作用
- Struts2 输入校验(Action中使用国际化资源文件、校验器校验)
- 转载 - Struts2基于XML配置方式实现对action的所有方法进行输入校验
- Struts2基于XML配置文件实现输入校验
- struts2对action中的方法进行输入校验---xml配置方式(3)
- Struts2 **-validation.xml <param name="expression">正则验证不起作用
- struts2中,xxx-validation.xml校验文件不起作用
- 【Struts2文件下载】struts.xml文件中配置action,访问路径问题
- 【Struts2】validation.xml 正则表达式不起作用
- Struts2_基于XML配置方式对指定action方法实现输入校验、基于XML校验的一些特点
- 升级到Struts 2.3.32问题-struts2校验文件不起作用
- struts2-18基于XML配置方式实现对action的所有方法或指定方法进行输入校验
- struts2:数据校验,通过Action中的validate()方法实现校验,图解
- struts2文件下载错误(<param name="inputName"> tag specified for this action.”)(实验楼)
- [JavaEE]Struts2路径问题(如何在jsp页面正确访问struts.xml中的action)
- 20171009_chr_validate Struts2输入校验
- struts2-16对action中的方法进行输入校验
- JqueryValidate表单相同Name不校验问题解决