- 浏览: 226593 次
- 性别:
- 来自: 武汉
最新评论
-
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 1985Struts2转码有个bug,可以导致应用挂掉(也可以执行类似 ... -
Struts2整合之动态图表OpenFlashChart
2012-07-06 15:56 2765Java开源项目中制作图表 ... -
Struts2整合之CKeditor和CKfinder
2012-07-11 17:29 3264先从官网上下载好最新的CKeditor和CKfinder包之后 ... -
Struts2之上传下载和页面渲染图片功能
2012-07-06 15:18 1727Struts2的上传下载是整合了commons-fileupl ... -
Struts2常用的数据标签
2012-06-30 16:24 1403<s:property /> <s:pr ... -
Struts2常用的集合控制标签
2012-06-30 15:56 1963<s:iterator/>迭代器标签 迭代器标签被 ... -
Struts2标签之token防止表单重复提交
2012-06-29 16:57 2037Struts2的token标签防止表单重复提交的思路是这样的: ... -
Struts2常用的UI标签
2012-06-29 17:03 1712<s:textfield />标签的label属性 ... -
Struts2中OGNL、ActionContext和值栈及线程安全浅析
2012-06-27 17:35 3084值栈(ValueStack) Struts2将OGNL ... -
Struts2之OGNL表达式中#,$,%的用法区别
2012-06-25 22:57 2511struts2 井号,星号,百分号 “#”主要有三种用途: 1 ... -
Struts2精萃之interceptor
2012-06-25 01:00 1869下面这段话能完美诠释拦截器的含义: 拦截器是AOP中的概念, ... -
Struts2的客户端校验方式及自带的13种校验器
2012-06-24 16:22 2568如果要使用Struts2的验证框架,首先要开启这个拦截器。在 ... -
Struts2之国际化i18N配置
2012-06-23 19:19 3224在struts2中需要做国际化的有: jsp页面的国际化,a ... -
Struts2之Web应用中文乱码问题的6种解决方法
2012-06-23 17:29 1497在web应用中通常用下面几种方法解决中文问题: 1.HTM ... -
Struts2配置精要之struts.xml( global和default的配置)
2012-06-23 16:48 4989下面这个struts.xml囊括了所有可能用到的标签用法,例如 ... -
Struts2配置精要之常量constant配置详解(包括零配置Convention 的常量)
2012-06-18 02:30 4097这是目前为止收集的stru ... -
Struts2配置精要之Result Types(Struts2.3.4)
2012-06-17 19:36 10333struts2.3.4的Predefined Result ... -
Struts2配置精要之defaultStack与paramsPrepareParamsStack
2012-06-17 17:56 4217在Struts2.3.4的struts-default.xml ... -
Struts2中action接收参数的三种方法及ModelDriven和Preparable接口结合JAVA反射机制的灵活用法
2012-06-17 00:48 4691Struts2中Action接收参数的方法主要有以下三种: ... -
Struts2原理浅析
2012-06-16 16:12 2084JavaEE把MVC设计模式引入 ...
相关推荐
Struts2输入校验,Struts2提供了功能强大的输入校验机制,通过Struts2内建的输入校验器,应用无需书写任何代码,即可完成大部分的校验功能,并可以同时完成客户端和服务器端的校验。
struts2对action中的所有方法进行校验
客户端脚本与服务器端对象的交互 服务器端Ajax框架 DWR(Direct Web Remoting)简介 配置DWR运行环境 使用DWR直接访问Java业务逻辑 利用DWR实现常见的Ajax功能 DWR异常处理 DWR开发常见问题解决 和现有Web框架Struts...
8、说说struts1与struts2的区别。 121 9、hibernate中的update()和saveOrUpdate()的区别,session的load()和get()的区别。 122 10、简述 Hibernate 和 JDBC 的优缺点? 如何书写一个 one to many 配置文件. 122 11、...
5.6.2 开发服务器端程序 223 5.7 本章小结 225 第6章 利用JMS实现企业消息处理 226 6.1 面向消息的架构和JMS概述 227 6.1.1 面向消息的应用架构 227 6.1.2 JMS的基础知识和优势 228 6.1.3 JMS的两个重要版本 229 6.2...
8、说说struts1与struts2的区别。 121 9、hibernate中的update()和saveOrUpdate()的区别,session的load()和get()的区别。 122 10、简述 Hibernate 和 JDBC 的优缺点? 如何书写一个 one to many 配置文件. 122 11、...
8、说说struts1与struts2的区别。 121 9、hibernate中的update()和saveOrUpdate()的区别,session的load()和get()的区别。 122 10、简述 Hibernate 和 JDBC 的优缺点? 如何书写一个 one to many 配置文件. 122 11、...
8、说说struts1与struts2的区别。 121 9、hibernate中的update()和saveOrUpdate()的区别,session的load()和get()的区别。 122 10、简述 Hibernate 和 JDBC 的优缺点? 如何书写一个 one to many 配置文件. 122 11、...
8、说说struts1与struts2的区别。 121 9、hibernate中的update()和saveOrUpdate()的区别,session的load()和get()的区别。 122 10、简述 Hibernate 和 JDBC 的优缺点? 如何书写一个 one to many 配置文件. 122 11、...
8、说说struts1与struts2的区别。 121 9、hibernate中的update()和saveOrUpdate()的区别,session的load()和get()的区别。 122 10、简述 Hibernate 和 JDBC 的优缺点? 如何书写一个 one to many 配置文件. 122 11、...
8、说说struts1与struts2的区别。 121 9、hibernate中的update()和saveOrUpdate()的区别,session的load()和get()的区别。 122 10、简述 Hibernate 和 JDBC 的优缺点? 如何书写一个 one to many 配置文件. 122 11...
各种java面试题集,面试前必备哦, 1. Java基础部分 7 1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 8 2、Java有没有goto? 8 3、说说&和&&的区别。...2、应用服务器与WEB SERVER的区别?...
由于B/S架构管理软件只安装在服务器端(Server)上,即应用程序在部署、升级、维护时,只需要在服务器端进行配置就可以了,网络管理人员只需要管理服务器就行了,用户界面主要事务逻辑在服务器(Server)端完全通过...
8、说说struts1与struts2的区别。 121 9、hibernate中的update()和saveOrUpdate()的区别,session的load()和get()的区别。 122 10、简述 Hibernate 和 JDBC 的优缺点? 如何书写一个 one to many 配置文件. 122 11、...
181、四种会话跟踪技术 42 182、Request对象的主要方法 43 183、我们在web应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,如何输出一个某种编码的字符串? 43 184、Servlet执行时一般实现哪几个方法? ...
181、四种会话跟踪技术 42 182、Request对象的主要方法 43 183、我们在web应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,如何输出一个某种编码的字符串? 43 184、Servlet执行时一般实现哪几个方法? ...
10.5 使用服务器端对象 418 10.5.1 问题 418 10.5.2 解决方案 418 10.5.3 工作原理 418 10.6 使用BlazeDS和Spring消费面向消息的服务 421 10.6.1 问题 421 10.6.2 解决方案 422 10.6.3 工作原理 422...