- 浏览: 3009108 次
- 性别:
- 来自: 河南
文章分类
- 全部博客 (340)
- Java综合 (26)
- 程序人生 (53)
- RIA-ExtJS专栏 (18)
- RIA-mxGraph专栏 (4)
- RIA-Flex4专栏 (43)
- 框架-Spring专栏 (16)
- 框架-持久化专栏 (22)
- 框架-Struts2专栏 (11)
- 框架-Struts专栏 (12)
- SQL/NOSQL (12)
- 报表/图表 (2)
- 工作流 (5)
- XML专栏 (4)
- 日常报错解决方案 (5)
- Web前端-综合 (12)
- Web/JSP (14)
- Web前端-ajax专栏 (14)
- Web前端-JQuery专栏 (9)
- IDE技巧 (6)
- FILE/IO (14)
- 远程服务调用 (2)
- SSO单点登录 (2)
- 资源分享 (22)
- 云计算 (1)
- 项目管理 (3)
- php专栏 (1)
- Python专栏 (2)
- Linux (1)
- 缓存系统 (1)
- 队列服务器 (1)
- 网络编程 (0)
- Node.js (1)
最新评论
-
hui1989106a:
我的也不能解压,360和好压都试了,都不行
《Spring in Action》完整中文版分享下载 -
temotemo:
这些example有些过时了,官方建议使用HBase-1.0 ...
Java操作Hbase进行建表、删表以及对数据进行增删改查,条件查询 -
zy8102:
非常感谢~
HeadFirst系列之七:《深入浅出SQL》原版高清PDF电子书分享下载 -
zy8102:
重命名了一下搞定了
HeadFirst系列之七:《深入浅出SQL》原版高清PDF电子书分享下载 -
zy8102:
为什么下载以后老解压不了呢?
HeadFirst系列之七:《深入浅出SQL》原版高清PDF电子书分享下载
1. Struts2中的输入校验
2. 编码方式校验
1) Action一定要继承自ActionSupport
2) 针对某个要进行校验的请求处理方法编写一个 public void validateXxx()方法,在方法内部进行表单数据校验.
3) 也可针对所有的请求处理方法编写public void validate()方法。
4) 在校验方法中,可以通过addFieldError()方法来添加字段校验错误消息。
5) 当校验失败时,Struts框架会自动跳转到name为input的Result页面。在校验失败页面中,可以使用<s:fielderror/>来显示错误消息
6) 简单,灵活。但重用性不高。
3. XML配置方式校验。在编码方式之前被执行。
1) 针对要校验的Action类,在同包下编写一个名为:Action类名-validation.xml校验规则文件。
2) 在校验规则文件中添加校验规则:具体的校验器名,参数可参看Struts2的reference或Struts2的API。
a) Field校验:针对Action类中每个非自定义类型的Field进行校验的规则。
<field name="要校验的Field名">
<field-validator type="校验规则器名" short-circuit="是否要短路径校验(默认是false)">
<param name="校验器要使用的参数名">值</param>
<message>校验失败时的提示消息</message>
</field-validator>
<!-- 还可添加其它的校验规则 -->
</field>
b) 非Field校验:针对Action类的某些Field使用OGNL表达进行组合校验。
<validator type="fieldexpression">
<param name="fieldName">pwd</param>
<param name="fieldName">pwd2</param>
<param name="expression"><![CDATA[pwd==pwd2]]></param><!-- OGNL表达式 -->
<message>确认密码和密码输入不一致</message>
</validator>
c) visitor校验:主要是用来校验Action类中的自定义类型Field。(针对使用模型驱动方式时)
i) 在Action类的的校验规则文件中针对自定义类型Field使用visitor校验规则。
<!-- 针对自定义Field使用visitor校验 -->
<field name="user">
<field-validator type="required" short-circuit="true">
<message>用户的信息必填</message><!-- 消息前缀 -->
</field-validator>
<field-validator type="visitor"><!-- 指定为visitor校验规则 -->
<param name="context">userContext</param><!-- 指定本visitor校验的上下文名 -->
<param name="appendPrefix">true</param><!-- 是否要添加校验失败消息的前缀 -->
<message>用户的</message><!-- 消息前缀 -->
</field-validator>
</field>
ii) 针对visitor的Field编写一个校验规则文件.文件名为: visitor字段类型名[-visitor校验的上下文名]-validation.xml. 例如: 本例中的文件名为User-userContext-validation.xml
注意: 此文件要存放到visitor字段类型所在的包下.
iii) 在visitor的Field校验规则文件中针对要校验的Field添加校验规则.
3) 在校验失败页面(名为input的result页面)中,可以使用<s:fielderror/>来显示错误消息。
4) 默认情况下,XML的校验规则对Action中所有的请求处理方法生效.此时应该只针对每个要校验的请求处理方法指定校验。有两种方式:
i) 只为Action中的指定方法指定校验规则文件,配置文件命名为:Action类型名-别名-validation.xml,
别名是要校验的方法对应的Action标签的name属性值。
如:UserAction在struts2.xml的配置为:
<package name="my" extends="struts-default" namespace="/">
<action name="user_*" class="com.javacrazyer.web.action.UserAction" method="{1}">
<result name="success">/info.jsp</result>
<result name="input">/user_{1}.jsp</result>
</action>
</package>
● UserAction中有registe方法和login方法,要对registe方法进行校验,则它的校验规则文件名为:UserAction-user_registe-validation.xml。
● 如果使用visitor校验器,必需指定visitor校验的上下文名。
ii) 在校验拦截器中指定要验证的方法。不太实用。
<action name="user_*" class="com.javacrazyer.web.action.UserAction" method="{1}">
<result name="success">/info.jsp</result>
<result name="input">/user_{1}.jsp</result>
<interceptor-ref name="defaultStack">
<!-- 给校验拦截器指定不进行校验的方法列表:用逗号隔开 -->
<param name="validation.excludeMethods">*</param>
<!-- 给校验拦截器指定要进行校验的方法列表:用逗号隔开 -->
<param name="validation.includeMethods">regist</param>
</interceptor-ref>
</action>
5) 同时使用客户端校验和服务器端校验
i) 设置<s:form>标签的validate属性:
false:默认值。校验框架只执行服务器端校验。
true:先执行客户端校验,然后再执行服务器端校验。
form标签会根据你在服务器端配置的验证规则生成对应的JavaScript验证代码。
目前支持的内置校验器:required、requiredstring、stringlength、regex validator、email、url、int、double
ii) 不太好用,不建议使用。建议使用jQuery进行页面表单校验。
6) 自定义校验器:
i) 继承自FieldValidatorSupport抽象类。重写validate(Object obj)方法
ii) 注册校验器类. 在应用程序的classpath下新建一校验器注册文件。名为validators.xml,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
"-//OpenSymphony Group//XWork Validator Config 1.0//EN"
"http://www.opensymphony.com/xwork/xwork-validator-config-1.0.dtd">
<validators>
<validator name="校验器名" class="校验器类的全限定名"/>
</validators>
4. Annotation方式校验: Struts2提供了注解的方式校验
1) @Validation 指明这个类或者接口将使用基于注解的校验。Struts2.1中已被标识为过时。
2) @Validations() 在同一个方法上要使用多个注解校验时。
3) @SkipValidation 指定某个方法不需要校验。否则所有方法都会使用校验。也可以在检验拦截器中使用validateAnnotatedMethodOnly
4) 13个内置校验器的注解版本:(注:这些注解都只能用在方法级别上) 具体参数参见Struts2的API或Reference。
@RequiredFieldValidator
@RequiredStringValidator
@StringLengthFieldValidator
@IntRangeFieldValidator
@DoubleRangeFieldValidator
@DateRangeFieldValidator
@ExpressionValidator
@FieldExpressionValidator
@RegexFieldValidator
@EmailValidator
@UrlValidator
@VisitorFieldValidator
@ConversionErrorFieldValidator
第一个示例:XML配置式校验器---注册页面
acc_registe.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>Struts2中基于XML配置式的校验器使用示例</title>
</head>
<body>
<h3>XML配置式校验器---注册页面</h3><hr/>
<div style="color:red"><s:fielderror/></div>
<form action="acc_registe.action" method="post">
<table>
<tr>
<td>ID</td>
<td><input type="text" name="id" value="${param.id}"/></td>
</tr>
<tr>
<td>登录名</td>
<td><input type="text" name="name" value="${param.name}"/></td>
</tr>
<tr>
<td>密码</td>
<td><input type="password" name="pwd"/></td>
</tr>
<tr>
<td>重复密码</td>
<td><input type="password" name="pwd2"/></td>
</tr>
<tr>
<td>时间</td>
<td><input type="text" name="registed_date" value="${param.registed_date}"/></td>
</tr>
<tr>
<td>email</td>
<td><input type="text" name="email" value="${param.email}"/></td>
</tr>
<tr>
<td>考试成绩</td>
<td><input type="text" name="score" value="${param.score}"/></td>
</tr>
<tr>
<td colspan="2"><input type="submit" value=" 提交 "/></td>
</tr>
</table>
</form>
</body>
</html>
src/struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
"http://struts.apache.org/dtds/struts-2.1.7.dtd">
<struts>
<!-- 请求参数的编码方式 -->
<constant name="struts.i18n.encoding" value="UTF-8"/>
<!-- 指定被struts2处理的请求后缀类型。多个用逗号隔开 -->
<constant name="struts.action.extension" value="action,do,go,xkk"/>
<!-- 当struts.xml改动后,是否重新加载。默认值为false(生产环境下使用),开发阶段最好打开 -->
<constant name="struts.configuration.xml.reload" value="true"/>
<!-- 是否使用struts的开发模式。开发模式会有更多的调试信息。默认值为false(生产环境下使用),开发阶段最好打开 -->
<constant name="struts.devMode" value="false"/>
<!-- 设置浏览器是否缓存静态内容。默认值为true(生产环境下使用),开发阶段最好关闭 -->
<constant name="struts.serve.static.browserCache" value="false" />
<!-- 是否允许在OGNL表达式中调用静态方法,默认值为false -->
<constant name="struts.ognl.allowStaticMethodAccess" value="true"/>
<!-- 指定由spring负责action对象的创建
<constant name="struts.objectFactory" value="spring" />
-->
<!-- 是否开启动态方法调用 -->
<constant name="struts.enable.DynamicMethodInvocation" value="false"/>
<package name="my" extends="struts-default" namespace="/">
<action name="acc_*" class="com.javacrazyer.web.action.AccountAction" method="{1}">
<result name="success">/info.jsp</result>
<result name="input">/acc_{1}.jsp</result>
</action>
</package>
</struts>
AccountAction.java
package com.javacrazyer.web.action;
import java.util.Date;
import com.opensymphony.xwork2.ActionSupport;
public class AccountAction extends ActionSupport {
private static final long serialVersionUID = -1418893621512812472L;
private Integer id;
private String name;
private String pwd;
private String pwd2;
private Double score;
private Date registed_date;
private String email;
public String registe() throws Exception{
System.out.println("registe-------------------");
return SUCCESS;
}
public String login()throws Exception{
return SUCCESS;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Double getScore() {
return score;
}
public void setScore(Double score) {
this.score = score;
}
public Date getRegisted_date() {
return registed_date;
}
public void setRegisted_date(Date registedDate) {
registed_date = registedDate;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public String getPwd2() {
return pwd2;
}
public void setPwd2(String pwd2) {
this.pwd2 = pwd2;
}
}
AccountAction-validation.xml [与AccountAction同目录]
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
"-//OpenSymphony Group//XWork Validator 1.0.2//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
<validators>
<!-- 字段校验 -->
<field name="id">
<field-validator type="required" short-circuit="true">
<message>ID必填的</message>
</field-validator>
<field-validator type="int">
<param name="min">20</param>
<param name="max">50</param>
<message>ID必须在 ${min} 到 ${max} 之间</message>
</field-validator>
</field>
<field name="name">
<field-validator type="requiredstring" short-circuit="true">
<message>姓名是必填的</message>
</field-validator>
<field-validator type="regex">
<param name="expression"><![CDATA[(^[a-zA-Z_]\w{3,9}$)]]></param>
<message>姓名不合法</message>
</field-validator>
</field>
<field name="pwd">
<field-validator type="requiredstring" short-circuit="true">
<message>密码是必填的</message>
</field-validator>
</field>
<!-- 非字段校验 -->
<validator type="fieldexpression">
<param name="fieldName">pwd</param>
<param name="fieldName">pwd2</param>
<param name="expression"><![CDATA[pwd==pwd2]]></param><!-- OGNL表达式 -->
<message>确认密码和密码输入不一致</message>
</validator>
<field name="score">
<field-validator type="double">
<param name="minInclusive">0.0</param>
<param name="maxInclusive">100.0</param>
<message>成绩必须在${minInclusive}和${maxInclusive}之间</message>
</field-validator>
</field>
<field name="email" >
<field-validator type="regex">
<param name="expression"><![CDATA[(^[_A-Za-z0-9-]+(\.[_A-Za-z0-9-]+)*@([A-Za-z0-9-])+((\.com)|(\.cn)|(\.net)|(\.org)|(\.info)|(\.edu)|(\.mil)|(\.gov)|(\.biz)|(\.ws)|(\.us)|(\.tv)|(\.cc)|(\.aero)|(\.arpa)|(\.coop)|(\.int)|(\.jobs)|(\.museum)|(\.name)|(\.pro)|(\.travel)|(\.nato)|(\..{2,3})|(\..{2,3}\..{2,3}))$)]]></param>
<message>邮箱不合法</message>
</field-validator>
</field>
<field name="registed_date">
<field-validator type="date">
<param name="min">1970-01-01</param>
<param name="max">2019-01-01</param>
<message>注册日期不合法</message>
</field-validator>
</field>
</validators>
第二个示例:XML配置式校验器---登录和注册页面
user_login.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>Struts2中基于XML配置式的校验器使用示例</title>
</head>
<body>
<h3>XML配置式校验器---登录页面</h3><hr/>
<div style="color:red"><s:fielderror/></div>
<form action="user_login.action" method="post">
<table>
<tr>
<td>登录名</td>
<td><input type="text" name="user.name" value="${param['user.name']}"/></td>
</tr>
<tr>
<td>密码</td>
<td><input type="password" name="user.pwd"/></td>
</tr>
<tr><td colspan="2"><input type="submit" value=" 提交 "/></td></tr>
</table>
</form>
</body>
</html>
user_registe.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>Struts2中基于XML配置式的校验器使用示例</title>
</head>
<body>
<h3>XML配置式校验器---注册页面</h3><hr/>
<div style="color:red"><s:fielderror/></div>
<form action="user_registe.action" method="post">
<table>
<tr>
<td>ID</td>
<td><input type="text" name="user.id" value="${param['user.id']}"/></td>
</tr>
<tr>
<td>登录名</td>
<td><input type="text" name="user.name" value="${param['user.name']}"/></td>
</tr>
<tr>
<td>密码</td>
<td><input type="password" name="user.pwd"/></td>
</tr>
<tr>
<td>重复密码</td>
<td><input type="password" name="user.pwd2"/></td>
</tr>
<tr>
<td>时间</td>
<td><input type="text" name="user.registed_date" value="${param['user.registed_date']}"/></td>
</tr>
<tr>
<td>email</td>
<td><input type="text" name="user.email" value="${param['user.email']}"/></td>
</tr>
<tr>
<td>考试成绩</td>
<td><input type="text" name="user.score" value="${param['user.score']}"/></td>
</tr>
<tr>
<td colspan="2"><input type="submit" value=" 提交 "/></td>
</tr>
</table>
</form>
</body>
</html>
src/struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
"http://struts.apache.org/dtds/struts-2.1.7.dtd">
<struts>
<!-- 请求参数的编码方式 -->
<constant name="struts.i18n.encoding" value="UTF-8"/>
<!-- 指定被struts2处理的请求后缀类型。多个用逗号隔开 -->
<constant name="struts.action.extension" value="action,do,go,xkk"/>
<!-- 当struts.xml改动后,是否重新加载。默认值为false(生产环境下使用),开发阶段最好打开 -->
<constant name="struts.configuration.xml.reload" value="true"/>
<!-- 是否使用struts的开发模式。开发模式会有更多的调试信息。默认值为false(生产环境下使用),开发阶段最好打开 -->
<constant name="struts.devMode" value="false"/>
<!-- 设置浏览器是否缓存静态内容。默认值为true(生产环境下使用),开发阶段最好关闭 -->
<constant name="struts.serve.static.browserCache" value="false" />
<!-- 是否允许在OGNL表达式中调用静态方法,默认值为false -->
<constant name="struts.ognl.allowStaticMethodAccess" value="true"/>
<!-- 指定由spring负责action对象的创建
<constant name="struts.objectFactory" value="spring" />
-->
<!-- 是否开启动态方法调用 -->
<constant name="struts.enable.DynamicMethodInvocation" value="false"/>
<package name="my" extends="struts-default" namespace="/">
<action name="user_*" class="com.javacrazyer.web.action.UserAction" method="{1}">
<result name="success">/info.jsp</result>
<result name="input">/user_{1}.jsp</result>
</action>
</package>
</struts>
UserAction.java
package com.javacrazyer.web.action;
import com.javacrazyer.domain.User;
import com.opensymphony.xwork2.ActionSupport;
public class UserAction extends ActionSupport {
private static final long serialVersionUID = -2554018432709689579L;
private User user; //自定义类型Field
public String registe() throws Exception{
System.out.println("registe======================");
return SUCCESS;
}
public String login() throws Exception{
return SUCCESS;
}
/*
public void validate(){
System.out.println("调用validate方法");
}
//执行exceute方法前调用
public void validateRegiste(){
System.out.println("调用validateRegiste方法");
String lname = user.getLoginname();
if(null != lname && !lname.trim().matches("[a-zA-Z_]\\w{3,19}")){
this.addFieldError("loginname", "用户名不能为空,且只能由4-20个字母和数字组成");
//this.addActionError("用户名不能为空,且只能由4-20个字母和数字组成");
}
}
public void validateLogin(){
System.out.println("调用validateLogin方法");
}
*/
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
UserAction-user_login-validation.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
"-//OpenSymphony Group//XWork Validator 1.0.2//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
<validators>
<!-- 针对自定义Field使用visitor校验 -->
<field name="user">
<field-validator type="required" short-circuit="true">
<message>用户的信息必填</message><!-- 消息前缀 -->
</field-validator>
<field-validator type="visitor">
<param name="context">userLoginContext</param><!-- 指定本visitor校验的上下文 -->
<param name="appendPrefix">true</param><!-- 是否要添加校验失败消息的前缀 -->
<message>用户的</message><!-- 消息前缀 -->
</field-validator>
</field>
</validators>
UserAction-user_registe-validation.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
"-//OpenSymphony Group//XWork Validator 1.0.2//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
<validators>
<!-- 针对自定义Field使用visitor校验 -->
<field name="user">
<field-validator type="required" short-circuit="true">
<message>用户的信息必填</message><!-- 消息前缀 -->
</field-validator>
<field-validator type="visitor">
<param name="context">userContext</param><!-- 指定本visitor校验的上下文 -->
<param name="appendPrefix">true</param><!-- 是否要添加校验失败消息的前缀 -->
<message>用户的</message><!-- 消息前缀 -->
</field-validator>
</field>
</validators>
第三个示例:注解方式校验器---注册页面
acc2_registe.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>Struts2中基于Annotation配置式的校验器使用示例</title>
</head>
<body>
<h3>Annotation配置式校验器---注册页面</h3><hr/>
<div style="color:red"><s:fielderror/></div>
<form action="acc2_registe.action" method="post">
<table>
<tr>
<td>ID</td>
<td><input type="text" name="id" value="${param.id}"/></td>
</tr>
<tr>
<td>登录名</td>
<td><input type="text" name="name" value="${param.name}"/></td>
</tr>
<tr>
<td>密码</td>
<td><input type="password" name="pwd"/></td>
</tr>
<tr>
<td>重复密码</td>
<td><input type="password" name="pwd2"/></td>
</tr>
<tr>
<td>时间</td>
<td><input type="text" name="registed_date" value="${param.registed_date}"/></td>
</tr>
<tr>
<td>email</td>
<td><input type="text" name="email" value="${param.email}"/></td>
</tr>
<tr>
<td>考试成绩</td>
<td><input type="text" name="score" value="${param.score}"/></td>
</tr>
<tr>
<td colspan="2"><input type="submit" value=" 提交 "/></td>
</tr>
</table>
</form>
</body>
</html>
src/struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
"http://struts.apache.org/dtds/struts-2.1.7.dtd">
<struts>
<!-- 请求参数的编码方式 -->
<constant name="struts.i18n.encoding" value="UTF-8"/>
<!-- 指定被struts2处理的请求后缀类型。多个用逗号隔开 -->
<constant name="struts.action.extension" value="action,do,go,xkk"/>
<!-- 当struts.xml改动后,是否重新加载。默认值为false(生产环境下使用),开发阶段最好打开 -->
<constant name="struts.configuration.xml.reload" value="true"/>
<!-- 是否使用struts的开发模式。开发模式会有更多的调试信息。默认值为false(生产环境下使用),开发阶段最好打开 -->
<constant name="struts.devMode" value="false"/>
<!-- 设置浏览器是否缓存静态内容。默认值为true(生产环境下使用),开发阶段最好关闭 -->
<constant name="struts.serve.static.browserCache" value="false" />
<!-- 是否允许在OGNL表达式中调用静态方法,默认值为false -->
<constant name="struts.ognl.allowStaticMethodAccess" value="true"/>
<!-- 指定由spring负责action对象的创建
<constant name="struts.objectFactory" value="spring" />
-->
<!-- 是否开启动态方法调用 -->
<constant name="struts.enable.DynamicMethodInvocation" value="false"/>
<package name="my" extends="struts-default" namespace="/">
<action name="acc2_*" class="com.javacrazyer.web.action.Account2Action" method="{1}">
<result name="success">/info.jsp</result>
<result name="input">/acc2_{1}.jsp</result>
</action>
</package>
</struts>
Account2Action.java
package com.javacrazyer.web.action;
import java.util.Date;
import org.apache.struts2.interceptor.validation.SkipValidation;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.validator.annotations.FieldExpressionValidator;
import com.opensymphony.xwork2.validator.annotations.RegexFieldValidator;
import com.opensymphony.xwork2.validator.annotations.RequiredStringValidator;
import com.opensymphony.xwork2.validator.annotations.Validations;
import com.opensymphony.xwork2.validator.annotations.ValidatorType;
/**
* 使用注解来配置校验的示例
*
*/
public class Account2Action extends ActionSupport {
private static final long serialVersionUID = -1418893621512812472L;
private Integer id;
private String name;
private String pwd;
private String pwd2;
private Double score;
private Date registed_date;
private String email;
@Validations(
requiredStrings={@RequiredStringValidator(fieldName="name",message="我的用户名是必须的",shortCircuit=true,trim=true,type=ValidatorType.FIELD),
@RequiredStringValidator(fieldName="pwd",message="我的密码是必须的",shortCircuit=true,trim=true,type=ValidatorType.FIELD)},
fieldExpressions={@FieldExpressionValidator(fieldName="pwd", message="两次密码不相同",expression="pwd==pwd2")},
regexFields={@RegexFieldValidator(expression="^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@([A-Za-z0-9-])+((\\.com)|(\\.cn)|(\\.net)|(\\.org)|(\\.info)|(\\.edu)|(\\.mil)|(\\.gov)|(\\.biz)|(\\.ws)|(\\.us)|(\\.tv)|(\\.cc)|(\\.aero)|(\\.arpa)|(\\.coop)|(\\.int)|(\\.jobs)|(\\.museum)|(\\.name)|(\\.pro)|(\\.travel)|(\\.nato)|(\\..{2,3})|(\\..{2,3}\\..{2,3}))$")}
)
public String registe() throws Exception{
System.out.println("registe-------------------");
return SUCCESS;
}
@SkipValidation
public String login()throws Exception{
return SUCCESS;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Double getScore() {
return score;
}
public void setScore(Double score) {
this.score = score;
}
public Date getRegisted_date() {
return registed_date;
}
public void setRegisted_date(Date registedDate) {
registed_date = registedDate;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public String getPwd2() {
return pwd2;
}
public void setPwd2(String pwd2) {
this.pwd2 = pwd2;
}
}
第四个示例:注解方式校验器---用户注册页面
user2_registe.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>Struts2中基于XML配置式的校验器使用示例</title>
</head>
<body>
<h3>XML配置式校验器---注册页面</h3><hr/>
<div style="color:red"><s:fielderror/></div>
<form action="user2_registe.action" method="post">
<table>
<tr>
<td>ID</td>
<td><input type="text" name="user.id" value="${param['user.id']}"/></td>
</tr>
<tr>
<td>登录名</td>
<td><input type="text" name="user.name" value="${param['user.name']}"/></td>
</tr>
<tr>
<td>密码</td>
<td><input type="password" name="user.pwd"/></td>
</tr>
<tr>
<td>重复密码</td>
<td><input type="password" name="user.pwd2"/></td>
</tr>
<tr>
<td>时间</td>
<td><input type="text" name="user.registed_date" value="${param['user.registed_date']}"/></td>
</tr>
<tr>
<td>email</td>
<td><input type="text" name="user.email" value="${param['user.email']}"/></td>
</tr>
<tr>
<td>考试成绩</td>
<td><input type="text" name="user.score" value="${param['user.score']}"/></td>
</tr>
<tr>
<td colspan="2"><input type="submit" value=" 提交 "/></td>
</tr>
</table>
</form>
</body>
</html>
src/struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
"http://struts.apache.org/dtds/struts-2.1.7.dtd">
<struts>
<!-- 请求参数的编码方式 -->
<constant name="struts.i18n.encoding" value="UTF-8"/>
<!-- 指定被struts2处理的请求后缀类型。多个用逗号隔开 -->
<constant name="struts.action.extension" value="action,do,go,xkk"/>
<!-- 当struts.xml改动后,是否重新加载。默认值为false(生产环境下使用),开发阶段最好打开 -->
<constant name="struts.configuration.xml.reload" value="true"/>
<!-- 是否使用struts的开发模式。开发模式会有更多的调试信息。默认值为false(生产环境下使用),开发阶段最好打开 -->
<constant name="struts.devMode" value="false"/>
<!-- 设置浏览器是否缓存静态内容。默认值为true(生产环境下使用),开发阶段最好关闭 -->
<constant name="struts.serve.static.browserCache" value="false" />
<!-- 是否允许在OGNL表达式中调用静态方法,默认值为false -->
<constant name="struts.ognl.allowStaticMethodAccess" value="true"/>
<!-- 指定由spring负责action对象的创建
<constant name="struts.objectFactory" value="spring" />
-->
<!-- 是否开启动态方法调用 -->
<constant name="struts.enable.DynamicMethodInvocation" value="false"/>
<package name="my" extends="struts-default" namespace="/">
<!-- 使用Annotation配置校验的Action -->
<action name="user2_*" class="com.javacrazyer.web.action.User2Action" method="{1}">
<result name="success">/info.jsp</result>
<result name="input">/user2_{1}.jsp</result>
</action>
</package>
</struts>
User2Action.java
package com.javacrazyer.web.action;
import com.javacrazyer.domain.User;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.validator.annotations.FieldExpressionValidator;
import com.opensymphony.xwork2.validator.annotations.RegexFieldValidator;
import com.opensymphony.xwork2.validator.annotations.RequiredStringValidator;
import com.opensymphony.xwork2.validator.annotations.Validations;
import com.opensymphony.xwork2.validator.annotations.ValidatorType;
/**
* 使用注解来配置校验器
*
*/
public class User2Action extends ActionSupport {
private static final long serialVersionUID = -2554018432709689579L;
private User user; //自定义类型Field
@Validations(
requiredStrings={@RequiredStringValidator(fieldName="user.name",message="你的用户名是必须的",shortCircuit=true,trim=true,type=ValidatorType.FIELD),
@RequiredStringValidator(fieldName="user.pwd",message="人的密码是必须的",shortCircuit=true,trim=true,type=ValidatorType.FIELD)},
fieldExpressions={@FieldExpressionValidator(fieldName="user.pwd", message="两次密码不相同",expression="user.pwd==user.pwd2")},
regexFields={@RegexFieldValidator(fieldName="user.email",message="邮箱不合法",expression="^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@([A-Za-z0-9-])+((\\.com)|(\\.cn)|(\\.net)|(\\.org)|(\\.info)|(\\.edu)|(\\.mil)|(\\.gov)|(\\.biz)|(\\.ws)|(\\.us)|(\\.tv)|(\\.cc)|(\\.aero)|(\\.arpa)|(\\.coop)|(\\.int)|(\\.jobs)|(\\.museum)|(\\.name)|(\\.pro)|(\\.travel)|(\\.nato)|(\\..{2,3})|(\\..{2,3}\\..{2,3}))$")}
)
public String registe() throws Exception{
System.out.println("registe======================");
return SUCCESS;
}
public String login() throws Exception{
return SUCCESS;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
另附:
User.java
package com.javacrazyer.domain;
import java.util.Date;
public class User {
private Integer id;
private String name;
private String pwd;
private String pwd2;
private Double score;
private Date registed_date;
private String email;
public User(){}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public String getPwd2() {
return pwd2;
}
public void setPwd2(String pwd2) {
this.pwd2 = pwd2;
}
public Double getScore() {
return score;
}
public void setScore(Double score) {
this.score = score;
}
public Date getRegisted_date() {
return registed_date;
}
public void setRegisted_date(Date registedDate) {
registed_date = registedDate;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
与user.java同一目录的User-userContext-validation.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
"-//OpenSymphony Group//XWork Validator 1.0.2//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
<validators>
<!-- 字段校验 -->
<field name="id">
<field-validator type="required" short-circuit="true">
<message>ID必填的</message>
</field-validator>
<field-validator type="int">
<param name="min">20</param>
<param name="max">50</param>
<message>ID必须在 ${min} 到 ${max} 之间</message>
</field-validator>
</field>
<field name="name">
<field-validator type="requiredstring" short-circuit="true">
<message>姓名是必填的</message>
</field-validator>
<field-validator type="regex">
<param name="expression"><![CDATA[(^[a-zA-Z_]\w{3,9}$)]]></param>
<message>姓名不合法</message>
</field-validator>
</field>
<field name="pwd">
<field-validator type="requiredstring" short-circuit="true">
<message>密码是必填的</message>
</field-validator>
</field>
<!-- 非字段校验 -->
<validator type="fieldexpression">
<param name="fieldName">pwd</param>
<param name="fieldName">pwd2</param>
<param name="expression"><![CDATA[pwd==pwd2]]></param><!-- OGNL表达式 -->
<message>确认密码和密码输入不一致</message>
</validator>
<field name="score">
<field-validator type="double">
<param name="minInclusive">0.0</param>
<param name="maxInclusive">100.0</param>
<message>成绩必须在${minInclusive}和${maxInclusive}之间</message>
</field-validator>
</field>
<field name="email">
<field-validator type="regex">
<param name="expression"><![CDATA[(^[_A-Za-z0-9-]+(\.[_A-Za-z0-9-]+)*@([A-Za-z0-9-])+((\.com)|(\.cn)|(\.net)|(\.org)|(\.info)|(\.edu)|(\.mil)|(\.gov)|(\.biz)|(\.ws)|(\.us)|(\.tv)|(\.cc)|(\.aero)|(\.arpa)|(\.coop)|(\.int)|(\.jobs)|(\.museum)|(\.name)|(\.pro)|(\.travel)|(\.nato)|(\..{2,3})|(\..{2,3}\..{2,3}))$)]]></param>
<message>邮箱不合法</message>
</field-validator>
</field>
<field name="registed_date">
<field-validator type="date">
<param name="min">1970-01-01</param>
<param name="max">2019-01-01</param>
<message>注册日期不合法</message>
</field-validator>
</field>
</validators>
与User.java同一目录下的User-userLoginContext-validation.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
"-//OpenSymphony Group//XWork Validator 1.0.2//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
<validators>
<field name="name">
<field-validator type="requiredstring" short-circuit="true">
<message>姓名是必填的</message>
</field-validator>
<field-validator type="regex">
<param name="expression"><![CDATA[(^[a-zA-Z_]\w{3,9}$)]]></param>
<message>姓名不合法</message>
</field-validator>
</field>
<field name="pwd">
<field-validator type="requiredstring" short-circuit="true">
<message>密码是必填的</message>
</field-validator>
</field>
</validators>
发表评论
-
struts2中关于ActionMessage在redirect传递时丢失问题的解决方案
2011-01-24 09:32 4295首先来看一段ACTION代码 @ParentPacka ... -
Struts2温习(10)--文件上传
2010-11-16 20:41 5600自接触这么多种技术的上传来看,还是Struts2的上传最好用, ... -
Struts2温习(9)--国际化的应用
2010-11-16 15:11 15081. Java对国际化的支持: Java内部使用unicode ... -
Struts温习(7)--自定义类型转换器
2010-11-16 10:08 3224一、概述 在B/S应用中,将字符串请求参数转换 ... -
Struts2温习(6)--拦截器(Inteceptor)的使用
2010-11-15 21:36 2230Interceptor(以下译为拦截器)是Struts ... -
Struts2温习(5)--OGNL的使用
2010-11-15 20:18 4057要谈OGNL在Struts2中的应用,首先得明白OGNL到底是 ... -
Struts2温习(4)--基于注解方式Action配置
2010-11-15 19:37 22820还是已登录来说明下这个Action的配置,这里要说的Actio ... -
Struts2温习(3)--ActionSuppot的使用
2010-11-15 17:29 2315之前在第一个示例中,使用到的Acrtion是没有继承任何方法的 ... -
Struts2温习(2)--工作原理图解
2010-11-15 10:11 1960就上篇文章的第一个完整的登录示例,我们本节来讲解下Struts ... -
Struts2温习(1)--最基本的示例
2010-11-15 10:01 3059有关Struts1的知识大部分都已经温习完毕,今天开始转向St ...
相关推荐
struts2-core-2.0.1.jar, struts2-core-2.0.11.1.jar, struts2-core-2.0.11.2.jar, struts2-core-2.0.11.jar, struts2-core-2.0.12.jar, struts2-core-2.0.14.jar, struts2-core-2.0.5.jar, struts2-core-2.0.6.jar,...
struts2-ssl-plugin-1.2.1.jar
Struts2 漏洞 S2-045 修补方法 Struts2 是一个基于 Java 的 Web 应用程序框架,广泛应用于企业级应用程序中。然而,Struts2 中存在着一些漏洞,例如 S2-045 漏洞,该漏洞可能会导致严重的安全问题。今天,我们将...
Struts2的核心功能包括:Action映射、结果映射、拦截器机制、强大的表单验证和国际化支持等。通过使用Struts2,开发者可以更专注于业务逻辑的实现,而非底层的HTTP请求处理。 **Spring框架** Spring 是一个全面的...
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,广泛应用于Web开发中,它易于人阅读和编写,同时也易于机器解析和生成。在Java世界里,`json-lib-2.1.jar` 是一个用于处理JSON的库,它提供了一系列...
Struts2提供了一套强大的表单验证机制,可以在服务器端对用户输入的数据进行验证,并将错误信息反馈给用户。 **10. 插件系统** Struts2的插件系统使得扩展框架功能变得简单,例如,Spring插件可以方便地将Struts2与...
struts2-convention-plugin-2.3.15.1.jar
Struts2 JSON Plugin是针对Apache Struts2框架的一个重要组件,版本为2.3.8。这个插件主要的功能是让Struts2应用程序能够轻松地处理JSON(JavaScript Object Notation)数据格式,使得Web应用可以方便地进行JSON序列...
-- 为修复struts2 s2-016、s2-017漏洞,重写DefaultActionMapper --> <bean type="org.apache.struts2.dispatcher.mapper.ActionMapper" name="myDefaultActionMapper" class=...
struts2-jfreechart-plugin-2.1.8.1.jar
Struts2提供了两种主要的验证方式:基于注解的验证和基于XML的验证。本例子主要关注XML形式的验证。 XML验证的优点在于其灵活性和可读性。开发者可以在Action类旁创建一个与Action类同名的.xml文件,比如Action类名...
最新struts2-spring-plugin-2.3.24.1.jar
struts2-config-browser-plugin-2.3.24.jar, struts2-core-2.3.24.jar, struts2-jasperreports-plugin-2.3.24.jar, struts2-jfreechart-plugin-2.3.24.jar, struts2-pell-multipart-plugin-2.3.24.jar, struts2-...
struts2-core-2.1.6.jarstruts2-core-2.1.6.jarstruts2-core-2.1.6.jarstruts2-core-2.1.6.jarstruts2-core-2.1.6.jarstruts2-core-2.1.6.jarstruts2-core-2.1.6.jarstruts2-core-2.1.6.jarstruts2-core-2.1.6.jar...
struts2-spring-plugin-2.3.15.3.jar struts整合Spring的插件Jar包。
struts2-core-2.2.1-sources.jar 源码,学strut2源码时能用到的
struts2-jfreechart-plugin-2.0.11.jarstruts2-jfreechart-plugin-2.0.11.jarstruts2-jfreechart-plugin-2.0.11.jar
Struts2标签库是基于JSP标准标签库(JSTL)的扩展,它提供了一系列预定义的标签,用于处理视图层的展示逻辑,如表单处理、数据验证、国际化等。这些标签通常比纯HTML和脚本更易于维护,且与Action类解耦,提高了代码...
struts2-core-2.3.15.1.jar