- 浏览: 230415 次
- 性别:
- 来自: 武汉
最新评论
-
spp_1987:
org.springframework.beans.facto ...
Hibernate4之多对多双向关联 -
spp_1987:
后台保存订单下面 有很多订单 调了 对应什么方法 实现的?
Hibernate4之多对多双向关联 -
spp_1987:
订单 和 商品之间 有中间表存在吗???
Hibernate4之多对多双向关联 -
spp_1987:
跟 官方 hibernate4.2.5提供 的 manytom ...
Hibernate4之JPA规范配置详解 -
zhuguopei_java:
谢谢。楼主你这是解释源码吗
Struts2中action接收参数的三种方法及ModelDriven和Preparable接口结合JAVA反射机制的灵活用法
Struts2的服务器端验证框架有四种方式校验,一种是利用dojo插件使用ajax实现页面无刷新的校验,一种是调用验证框架即配置一个xml文件的形式,另一种是在Action中的validate()方法手动校验,还有一种是零配置里面用annotation的形式校验。
如果要使用Struts2的验证框架,首先要开启这个拦截器。在文档中是这样介绍的:
默认的拦截器堆栈defaultStack已经在开启验证。在创建自己的interceptor-stack时一定要包括validation和workflow拦截器。
1.加上dojo plugin这个jar包使用struts2的ajax校验。
需要注意的:
1.<sx:head /> must be in the page, to be able to use AJAX functionality.
2.The form tag does not have validate set to true, which would perform client validation before the AJAX validation.
3.The submit tag must have validate set to true in order to perform AJAX validation.
4.如果action实现了ModelDrive接口。返回的JSON数据里的"model."将从字段名称被切割。如果验证成功,讲返回空JSON字符串。
2.在Action中实现手动校验:
如果我们重写了validate方法,则该方法会应用于此Action中的所有提供服务的业务方法。例如某个Action中有一个login()业务方法,我们可以写一个validateLogin()方法来进行login()的特殊校验,那么Action里执行方法的顺序就是:
validateLogin()------->validate()------->login()
在validateXXX方法里可以用addFiledError()讲相应的错误信息保存到fieldError中并返回input视图用<s:if test="hasFieldErrors()"><s;filederror/><s;if/>来展示。
3.在xml文件里面配置:
当一个Action中有多个业务方法时,我们可能需要对其中的某个方法配置单独的校验规则,比如注册时的要求用户两次输入的密码必须相同等,这时我们可以配置一个单独的校验文件,命名规则为:<actionName>-<methodName>-validation.xml,可以看到这里多了一个方法名,这个方法名就是要校验的业务逻辑在struts.xml配置文件中配置的name,这个文件也要同Action放在同一个目录下。注意这个方法名不是指的Action里面的方法名,而是action请求的name
当有多个校验文件时:
例如有一个LoginAction继承BaseAction,这两个Action中都有业务方法login,并且存在4份校验规则文件如下:BaseAction-vadition.xml, BaseAction-login-validation.xml , LoginAction-validation.xml, LoginAction-login-validation.xml那么用户访问LoginAction的login方法里,会按照以上的顺序执行校验规则,实际的校验规则是以上四个校验规则的总和,但是如果存在冲突的情况下,后面的校验规则优先。
4.用注解配置:
An Annotated Interface
An Annotated Class
如果要使用Struts2的验证框架,首先要开启这个拦截器。在文档中是这样介绍的:
默认的拦截器堆栈defaultStack已经在开启验证。在创建自己的interceptor-stack时一定要包括validation和workflow拦截器。
<interceptor-stack name="defaultStack"> ... <interceptor-ref name="validation"> <param name="excludeMethods">input,back,cancel,browse</param> </interceptor-ref> <interceptor-ref name="workflow"> <param name="excludeMethods">input,back,cancel,browse</param> </interceptor-ref> </interceptor-stack>
1.加上dojo plugin这个jar包使用struts2的ajax校验。
<!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"> <message>You must enter a name</message> </field-validator> </field> <field name="age"> <field-validator type="int"> <param name="min">13</param> <param name="max">19</param> <message>Only people ages 13 to 19 may take this quiz</message> </field-validator> </field> </validators>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <package> <action name="quizAjax" class="org.apache.struts2.showcase.validation.QuizAction"> <interceptor-ref name="jsonValidationWorkflowStack"/> <result name="input">quiz-ajax.jsp</result> <result>quiz-success.jsp</result> </action> </package> ......
<%@ taglib prefix="s" uri="/struts-tags" %> <%@ taglib prefix="sx" uri="/struts-dojo-tags" %> <html> <head> <title>Validation - AJAX</title> <sx:head /> </head> <s:url id="url" namespace="/validation" action="quizAjax"/> <body> <s:form method="post" theme="xhtml" namespace="/nodecorate" action="quizAjax" id="form"> <s:textfield label="Name" name="name" /> <s:textfield label="Age" name="age" /> <s:textfield label="Favorite color" name="answer"/> <sx:submit validate="true" /> </s:form>
需要注意的:
1.<sx:head /> must be in the page, to be able to use AJAX functionality.
2.The form tag does not have validate set to true, which would perform client validation before the AJAX validation.
3.The submit tag must have validate set to true in order to perform AJAX validation.
4.如果action实现了ModelDrive接口。返回的JSON数据里的"model."将从字段名称被切割。如果验证成功,讲返回空JSON字符串。
2.在Action中实现手动校验:
如果我们重写了validate方法,则该方法会应用于此Action中的所有提供服务的业务方法。例如某个Action中有一个login()业务方法,我们可以写一个validateLogin()方法来进行login()的特殊校验,那么Action里执行方法的顺序就是:
validateLogin()------->validate()------->login()
在validateXXX方法里可以用addFiledError()讲相应的错误信息保存到fieldError中并返回input视图用<s:if test="hasFieldErrors()"><s;filederror/><s;if/>来展示。
3.在xml文件里面配置:
当一个Action中有多个业务方法时,我们可能需要对其中的某个方法配置单独的校验规则,比如注册时的要求用户两次输入的密码必须相同等,这时我们可以配置一个单独的校验文件,命名规则为:<actionName>-<methodName>-validation.xml,可以看到这里多了一个方法名,这个方法名就是要校验的业务逻辑在struts.xml配置文件中配置的name,这个文件也要同Action放在同一个目录下。注意这个方法名不是指的Action里面的方法名,而是action请求的name
当有多个校验文件时:
例如有一个LoginAction继承BaseAction,这两个Action中都有业务方法login,并且存在4份校验规则文件如下:BaseAction-vadition.xml, BaseAction-login-validation.xml , LoginAction-validation.xml, LoginAction-login-validation.xml那么用户访问LoginAction的login方法里,会按照以上的顺序执行校验规则,实际的校验规则是以上四个校验规则的总和,但是如果存在冲突的情况下,后面的校验规则优先。
4.用注解配置:
<interceptor-ref name="validation"> <param name="validateAnnotatedMethodOnly">true</param> <param name="excludeMethods">input,back,cancel,browse</param> </interceptor-ref>
An Annotated Interface
@Validation() public interface AnnotationDataAware { void setBarObj(Bar b); Bar getBarObj(); @RequiredFieldValidator(message = "You must enter a value for data.") @RequiredStringValidator(message = "You must enter a value for data.") void setData(String data); String getData(); }
An Annotated Class
@Validation() public class SimpleAnnotationAction extends ActionSupport { @RequiredFieldValidator(type = ValidatorType.FIELD, message = "You must enter a value for bar.") @IntRangeFieldValidator(type = ValidatorType.FIELD, min = "6", max = "10", message = "bar must be between ${min} and ${max}, current value is ${bar}.") public void setBar(int bar) { this.bar = bar; } public int getBar() { return bar; } @Validations( requiredFields = {@RequiredFieldValidator(type = ValidatorType.SIMPLE, fieldName = "customfield", message = "You must enter a value for field.")}, requiredStrings = {@RequiredStringValidator(type = ValidatorType.SIMPLE, fieldName = "stringisrequired", message = "You must enter a value for string.")}, emails = { @EmailValidator(type = ValidatorType.SIMPLE, fieldName = "emailaddress", message = "You must enter a value for email.")}, urls = { @UrlValidator(type = ValidatorType.SIMPLE, fieldName = "hreflocation", message = "You must enter a value for email.")}, stringLengthFields = {@StringLengthFieldValidator(type = ValidatorType.SIMPLE, trim = true, minLength="10" , maxLength = "12", fieldName = "needstringlength", message = "You must enter a stringlength.")}, intRangeFields = { @IntRangeFieldValidator(type = ValidatorType.SIMPLE, fieldName = "intfield", min = "6", max = "10", message = "bar must be between ${min} and ${max}, current value is ${bar}.")}, dateRangeFields = {@DateRangeFieldValidator(type = ValidatorType.SIMPLE, fieldName = "datefield", min = "-1", max = "99", message = "bar must be between ${min} and ${max}, current value is ${bar}.")}, expressions = { @ExpressionValidator(expression = "foo > 1", message = "Foo must be greater than Bar 1. Foo = ${foo}, Bar = ${bar}."), @ExpressionValidator(expression = "foo > 2", message = "Foo must be greater than Bar 2. Foo = ${foo}, Bar = ${bar}."), @ExpressionValidator(expression = "foo > 3", message = "Foo must be greater than Bar 3. Foo = ${foo}, Bar = ${bar}."), @ExpressionValidator(expression = "foo > 4", message = "Foo must be greater than Bar 4. Foo = ${foo}, Bar = ${bar}."), @ExpressionValidator(expression = "foo > 5", message = "Foo must be greater than Bar 5. Foo = ${foo}, Bar = ${bar}.") } ) public String execute() throws Exception { return SUCCESS; } }
发表评论
-
Struts2远程执行漏洞
2013-01-25 22:44 2088Struts2转码有个bug,可以导致应用挂掉(也可以执行类似 ... -
Struts2整合之动态图表OpenFlashChart
2012-07-06 15:56 2846Java开源项目中制作图表 ... -
Struts2整合之CKeditor和CKfinder
2012-07-11 17:29 3302先从官网上下载好最新的CKeditor和CKfinder包之后 ... -
Struts2之上传下载和页面渲染图片功能
2012-07-06 15:18 1810Struts2的上传下载是整合了commons-fileupl ... -
Struts2常用的数据标签
2012-06-30 16:24 1445<s:property /> <s:pr ... -
Struts2常用的集合控制标签
2012-06-30 15:56 2008<s:iterator/>迭代器标签 迭代器标签被 ... -
Struts2标签之token防止表单重复提交
2012-06-29 16:57 2096Struts2的token标签防止表单重复提交的思路是这样的: ... -
Struts2常用的UI标签
2012-06-29 17:03 1767<s:textfield />标签的label属性 ... -
Struts2中OGNL、ActionContext和值栈及线程安全浅析
2012-06-27 17:35 3154值栈(ValueStack) Struts2将OGNL ... -
Struts2之OGNL表达式中#,$,%的用法区别
2012-06-25 22:57 2572struts2 井号,星号,百分号 “#”主要有三种用途: 1 ... -
Struts2精萃之interceptor
2012-06-25 01:00 1910下面这段话能完美诠释拦截器的含义: 拦截器是AOP中的概念, ... -
Struts2的客户端校验方式及自带的13种校验器
2012-06-24 16:22 2615如果要使用Struts2的验证框架,首先要开启这个拦截器。在 ... -
Struts2之国际化i18N配置
2012-06-23 19:19 3278在struts2中需要做国际化的有: jsp页面的国际化,a ... -
Struts2之Web应用中文乱码问题的6种解决方法
2012-06-23 17:29 1567在web应用中通常用下面几种方法解决中文问题: 1.HTM ... -
Struts2配置精要之struts.xml( global和default的配置)
2012-06-23 16:48 5052下面这个struts.xml囊括了所有可能用到的标签用法,例如 ... -
Struts2配置精要之常量constant配置详解(包括零配置Convention 的常量)
2012-06-18 02:30 4201这是目前为止收集的stru ... -
Struts2配置精要之Result Types(Struts2.3.4)
2012-06-17 19:36 10424struts2.3.4的Predefined Result ... -
Struts2配置精要之defaultStack与paramsPrepareParamsStack
2012-06-17 17:56 4264在Struts2.3.4的struts-default.xml ... -
Struts2中action接收参数的三种方法及ModelDriven和Preparable接口结合JAVA反射机制的灵活用法
2012-06-17 00:48 4775Struts2中Action接收参数的方法主要有以下三种: ... -
Struts2原理浅析
2012-06-16 16:12 2143JavaEE把MVC设计模式引入 ...
相关推荐
通过这种方式,开发者可以轻松地在Struts2中实现输入校验,既保证了数据的正确性,又提高了应用的安全性。不仅如此,Struts2的灵活性还允许开发者扩展和定制自己的校验器,以满足不同项目的需求。总的来说,Struts2...
在这个"struts2实现服务器端校验示例"中,我们将探讨如何在Struts2中实现高效的服务器端数据校验,并结合Dojo实现类似AJAX的实时验证。 首先,Struts2的校验框架是基于Action类的,每个Action类都可以关联一个或多...
在Struts2中,输入校验通常分为两种方式:客户端校验和服务器端校验。客户端校验主要通过JavaScript在用户端进行,可以提供即时反馈,但安全性较低,因为用户可以禁用JavaScript或绕过校验。服务器端校验则是在...
在Struts2中,可以使用`<s:fielderror>`标签显示服务器端验证错误。 3. **配置校验规则**:Struts2的校验规则可以通过XML或注解方式定义。XML方式通常在struts.xml或相应的action类配置文件中定义,而注解方式则...
总结起来,Struts2的用户输入验证涉及客户端和服务器端两个层面,通过编程或配置两种方式实现。为了确保系统的健壮性,通常需要结合两者,提供多层防线。在编写验证代码时,应注重错误信息的友好性和安全性,以提供...
Struts2支持两种服务器端校验方式:代码校验和配置校验。 3. **代码校验**: 代码校验是通过编写Java代码来实现的。具体步骤如下: - **步骤一:封装数据**:将用户输入的值封装到Action类的属性中,如在`...
总结一下,Struts2和DWR的集成为Ajax输入校验提供了一种高效的方法。Struts2负责处理业务逻辑和数据校验,而DWR则作为桥梁,实现了客户端与服务器端的实时通信。这种组合使用不仅可以确保数据的准确性,还能提升Web...
- Struts2提供了一种灵活且可扩展的方式来实现输入校验,包括在服务器端和客户端进行。 2. **服务器端校验** - 在Struts2中,服务器端校验通常使用Action类的属性注解或者基于XML的配置文件来完成。 - 使用注解...
总的来说,Struts2提供了灵活且强大的数据校验机制,无论是在XML配置文件中定义,还是利用注解,甚至自定义校验逻辑,都能有效地保证Action中各个方法的输入数据合法,从而提高应用程序的稳定性和安全性。...
这篇博客"Struts2输入校验深入总结"可能详细介绍了Struts2框架中的验证机制,包括其工作原理、配置方式以及最佳实践。 在Struts2中,输入校验主要用于检查用户提交的数据是否符合预期格式,例如,检查电子邮件地址...
在Struts2中,数据验证分为两种类型:客户端验证和服务器端验证。客户端验证通常通过JavaScript在用户浏览器中进行,而服务器端验证则在服务器上执行,确保即使禁用JavaScript也能保证数据安全。本示例主要关注...
本篇笔记将详细讲解Struts2中服务器端与客户端对表单数据的校验方式。 首先,Struts2提供了一系列内置的校验器,包括: 1. Irequired:检查字段是否为空,是必填项。 2. IIrequiredstring:验证字段是否为非空字符...
Struts2提供两种主要的输入验证方式:客户端验证和服务器端验证。 1. 客户端验证:通过JavaScript在用户提交表单前检查输入,可以提供实时反馈,但安全性较低,因为JavaScript可以被禁用或篡改。 2. 服务器端验证:...
服务器端验证是Struts1框架的一个关键特性,用于确保用户输入的数据质量和安全性。在这个主题中,我们将深入探讨Struts1的服务器端验证机制,以及它如何处理线程安全问题。 服务器端验证的重要性在于,它可以防止...
- Struts2还提供了与Dojo JavaScript库的集成,可以实现客户端的数据校验,增强用户体验,减少服务器端的压力。 8. **实际应用场景** - 数据校验在用户注册、订单处理、登录验证等场景下非常重要,防止非法数据...
Struts2提供了一种灵活的机制来验证用户输入,通过在Action类中定义校验规则或使用XML配置文件。当用户提交表单时,框架会自动执行这些校验规则,并在验证失败时返回错误信息。这种校验可以在前端(浏览器)或后端...
3. **服务器校验**:服务器端验证是确保用户输入数据有效性的关键步骤。Struts2提供了丰富的验证机制,如Validator插件和注解方式,可以在Action类或Model对象上定义验证规则,一旦数据不符合规则,会返回错误信息并...