- 浏览: 890551 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (687)
- java (127)
- servlet (38)
- struts (16)
- spring (22)
- hibernate (40)
- javascript (58)
- jquery (18)
- tomcat (51)
- 设计模式 (6)
- EJB (13)
- jsp (3)
- oracle (29)
- RUP (2)
- ajax (3)
- java内存管理 (4)
- java线程 (12)
- socket (13)
- path (5)
- XML (10)
- swing (2)
- UML (1)
- JBPM (2)
- 开发笔记 (45)
- Note参考 (15)
- JAXB (4)
- Quartz (2)
- 乱码 (2)
- CSS (2)
- Exception (4)
- Tools (7)
- sqlserver (3)
- DWR (7)
- Struts2 (47)
- WebService (2)
- 问题解决收藏 (7)
- JBOSS (7)
- cache (10)
- easyUI (19)
- jQuery Plugin (11)
- FreeMarker (6)
- Eclipse (2)
- Compass (2)
- JPA (1)
- WebLogic (1)
- powerdesigner (1)
- mybatis (1)
最新评论
-
bugyun:
受教了,谢谢
java 正则表达式 过滤html标签 -
xiongxingxing_123:
学习了,感谢了
java 正则表达式 过滤html标签 -
wanmeinange:
那如果无状态的。对同一个任务并发控制怎么做?比如继承Quart ...
quartz中参数misfireThreshold的详解 -
fanjieshanghai:
...
XPath 元素及属性查找 -
tianhandigeng:
还是没明白
quartz中参数misfireThreshold的详解
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配置式校验器---注册页面
第一个示例: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>
发表评论
-
ognl表达式
2011-07-07 00:36 1299OGNL是Object Graphic Navigation ... -
在Struts 2_0中实现表单数据校验
2011-07-07 00:02 1144转换与校验(Conversion & Validati ... -
简单的struts2输入校验框架
2011-05-13 23:43 10881.输入页面login.jsp: <%@ page ... -
struts2在学习(十二)--表单验证的两种方式
2011-05-13 23:13 960第四个示例:注解方式校验器---用户注册页面user2_reg ... -
struts2在学习(十一)--表单验证的两种方式
2011-05-13 23:09 906第二个示例:XML配置式校验器---登录和注册页面user_l ... -
struts2采用convention-plugin实现零配置
2011-05-13 21:58 1120最近开始关注struts2的新特性,从这个版本开始,Strut ... -
基于SSH2框架Struts2拦截器的登录验证实现
2011-04-01 22:00 2291通过之前的Struts2.1.6+Spring2.5.6+H ... -
通过ActionContext类访问Servlet对象
2011-04-01 21:40 1920ActionContext类位于com.opensympho ... -
webwork 之销毁session
2011-04-01 17:35 1767销毁的意思?不是清空 ... -
Struts2 Convention Plugin(三)
2011-03-18 01:26 1200Annotation 参考Convention使用某些注解语句 ... -
Struts2 Convention Plugin(二)
2011-03-18 01:25 1149Results and result codesStruts ... -
Struts2 Convention Plugin(一)
2011-03-18 01:25 1102Introduction从struts2.1版本开始,Conv ... -
struts2页面中的标签调用类的方法
2011-03-15 16:33 1619<s:set name="str" ... -
Apache Struts 2.2.1 GA版发布
2011-03-14 17:14 1337昨日,Apache软件基金会发布了Struts 2.2.1 G ... -
spring2 +hibernate 3 + struts 配置
2011-03-14 15:15 12131. web.xml 1. <?xml versi ... -
Struts2 中action之间的跳转
2011-03-14 12:32 1254转载于http://zhou568xiao.iteye.com ... -
Struts2 的Result Type
2011-03-13 16:35 1048http://www.blogjava.net/duanzhi ... -
struts2 跳转类型 result type=chain、dispatcher、redirect(redirect-action)
2011-03-13 16:32 1623dispatcher 为默认跳转类型,用于返回一个视图资源(如 ... -
struts2防止重复提交
2011-03-10 23:07 1295struts2的防止重复提交 也使用到了 token (令牌机 ... -
Struts2 数据输入校验(1) —— 函数验证
2011-02-20 20:47 914用struts2标签库来实现上述目的的基本原理: 错误消息分为 ...
相关推荐
Struts2提供了两种主要的验证方式:基于注解的验证和基于XML的验证。本例子主要关注XML形式的验证。 XML验证的优点在于其灵活性和可读性。开发者可以在Action类旁创建一个与Action类同名的.xml文件,比如Action类名...
首先,Struts2的输入验证分为两种方式:手动验证和使用验证框架。 **手动验证**主要包括两种方法: 1. **重写validate()方法**:这是最基础的方式,所有Action类都需要继承ActionSupport类,然后在validate()方法中...
在Struts框架中,表单验证通常通过两个主要方式实现:客户端验证和服务器端验证。 1. 客户端验证: 客户端验证发生在用户的浏览器上,通常使用JavaScript或jQuery等库来执行。这种方式可以即时反馈错误,提高用户...
Struts2的验证框架主要有两种方式:XML配置和注解配置。本篇重点介绍注解方式。注解方法允许开发者在Action类的属性上直接定义验证规则,减少了XML配置文件的繁琐工作。 ### 3. 注解基础 - `@Validated`:这个注解...
Struts提供了两种验证方式:ActionForm验证和Validator框架验证。ActionForm验证是早期版本中的方法,通过在ActionForm类中定义验证逻辑。Validator框架则是Struts 1.x中的增强功能,允许更灵活的XML配置和可重用的...
这个项目中的代码示例可以作为学习和参考,帮助开发者理解如何在实际项目中整合Struts2和jQuery的formValidator,提高表单验证的效率和用户体验。对于初学者来说,深入研究这个示例有助于掌握Struts2和jQuery在实际...
Struts2提供了两种验证方式:客户端验证和服务器端验证。客户端验证通常通过JavaScript在浏览器端进行,可以即时反馈错误信息,但容易被绕过;而服务器端验证是必不可少的安全环节,无论客户端验证是否通过,服务器...
本文将详细介绍如何在 Struts2 框架中利用 JavaScript(JS)进行客户端表单验证,并结合实际代码示例来解释具体的实现方式。 #### 一、基本概念 Struts2 是一个基于 Java 的企业级应用框架,它支持多种技术栈,...
7. **配置文件**:Struts2的配置通常分为XML配置和注解配置两种方式。struts.xml文件用于定义Action、Result、Interceptor等,而注解配置可以直接在Action类上声明,简化配置过程。 8. **异常处理**:Struts2提供了...
1. 验证规则定义:Struts的验证通常有两种方式,一种是在ActionForm类中添加校验方法,另一种是使用XML配置文件定义验证规则。XML配置文件通常位于`struts-config.xml`或`struts-validation.xml`中,包含字段名称、...
3. **配置灵活性**:Struts2支持XML和注解两种配置方式。XML配置通常用于大型项目,而注解则适用于快速开发和小型项目。这两种方式可以混合使用,以适应不同的需求。 4. **结果类型(Result Type)**:Struts2允许...
5. **表单(Forms)**:Struts 2提供了一种声明式的方式处理表单输入,通过Action类的属性与表单字段对应,简化了验证和数据绑定的过程。 6. **国际化(Internationalization, i18n)**:Struts 2支持多语言环境,...
这两种结果类型都可以在处理完表单后使浏览器跳转到新的URL,从而避免再次提交。 1. **redirect** 结果类型: 这种结果类型会发送一个HTTP 302重定向响应到客户端,浏览器接收到这个响应后,会发起一个新的GET请求...
- **下载原理**:Struts2提供了一种简单的方式来响应客户端的下载请求。 - **配置与实现**: - 设置下载Action的方法。 - 在`struts.xml`中配置下载相关的参数。 #### 六、国际化 **6.1 国际化配置** - **资源...
Struts1.2提供了一种称为“Validator框架”的验证机制,它可以验证用户输入的数据是否符合预设的规则。这通常涉及到两部分:ValidatorForm接口的实现和验证规则文件(validation.xml)的编写。在UserBean中实现...
在Struts2中,输入校验器是一种实现数据验证的组件,它们通过配置在XML文件(如`default.xml`)中来定义,并与Action类的属性关联。`default.xml`文件通常位于`com/opensymphony/xwork2/validator/validators`路径下...
表单验证有两种主要方式:客户端验证和服务器端验证。客户端验证通过JavaScript在浏览器中执行,可以提供即时反馈,但容易被绕过;服务器端验证是必需的,因为它是安全的,但可能会增加服务器负载。 客户端验证可以...
在视图层,Struts2提供了一种方便的方式来展示这些验证错误。你可以使用OGNL(Object-Graph Navigation Language)表达式来获取并显示错误信息,例如: ```jsp <%@ taglib prefix="s" uri="/struts-tags" %> ... ()...
Struts2的配置分为XML配置和注解配置两种方式。XML配置通常在struts.xml文件中进行,包括Action配置、Interceptor配置等;注解配置则可以直接在Action类上进行,简化了配置工作。 五、Action与ActionMapping Action...
在struts2-login-example中,可能有"success"和"input"两种结果,分别对应登录成功和失败的情况。 9. **异常处理**:Struts2提供了全局异常处理机制,可以通过配置文件定义如何处理未捕获的异常,以提供统一的错误...