`

Struts2

    博客分类:
  • J2EE
阅读更多
Struts2 valiation:
分编程式验证、声明式验证、注解式验证。

声明式验证:
http://struts.apache.org/2.x/docs/validation.html
http://iehyou.iteye.com/blog/577214
http://hsw212.iteye.com/blog/300129

关于xxxAction-actionName-validation.xml:
引用
struts验证分为2种:Non-Field Validator 和 Field-Validator
引用
There are two ways you can define validators in your -validation.xml file:
1 <validator>
2 <field-validator>
Keep the following in mind when using either syntax:
The <validator> element allows you to declare both types of validators (either a plain Validator a field-specific FieldValidator).
如:
下面是一个Non-Field Validator:
<validator type="expression> 
    <param name="expression">foo gt bar</param> 
    <message>foo must be great than bar.</message> 
</validator> 

下面是一个Field-Validator:
<validator type="required"> 
    <param name="fieldName">bar</param> 
    <message>You must enter a value for bar.</message> 
</validator> 

The <field-validator> elements are basically the same as the <validator> elements except that they inherit the fieldName attribute from the enclosing <field> element. FieldValidators defined within a <field-validator> element will have their fieldName automatically filled with the value of the parent <field> element's fieldName attribute. The reason for this structure is to conveniently group the validators for a particular field under one element, otherwise the fieldName attribute would have to be repeated, over and over, for each individual <validator>.
故结论:<field-validator>需和外围的<field>结合使用,并在外围<field>的name属性上指定field的值;他实现的效果和使用“<validator>嵌套<param name="fieldName">”的方式实现的Field-Validator是一模一样的!使用<field-validator>是为了对单个输入域的验证可以放在一起,方便书写查看归类而已。
在<field>中不可以使用Non-Field Validator。


引用
验证器的执行先后: 
Non Field Validators优先Field Validators, 
Non Field Validators排在前面的先执行 
Field Validators排在后面的先执行(我注:这句话是错误的,应该也是排在前面的先执行。详见:http://struts.apache.org/2.x/docs/validation.html#Validation-ShortCircuitingValidator)
短路原则: 
Non Field Validators最优先执行,如果某个字段效验失败,则改字段下的所有效验不会获得执行机会,不会影响其他字段的执行,Field Validators一样操作。 
Non Field Validators不会影响Field Validators的执行。 

expression效验器 求出ognl表达式的值。为true通过验证

关于validation配置文件的命名:
两种方式:
引用
<actionClass>-validation.xml
<actionClass>-<actionAlias>-validation.xml
actionAlias指什么?指的就是action配置中<action>标签上name属性的名字。
比如有如下action配置:
	<package name="upc.user" extends="mes-default"
		namespace="/upc/user">
		<action name="index" class="userAction" method="execute">
			<result>userIndex.jsp</result>
		</action>
		<action name="save" class="userAction" method="save">
			<result>/common/operationSuccess.jsp</result>
			<result name="input">userEdit.jsp</result>
		</action>
	</package>
则其中的index和save就是actionAlias。
针对上例:
若validation配置文件名为UserAction-validation.xml,则UserAction的所有方法(这里有两个,execute方法和save方法)在执行前都会通过该校验文件做校验;
若validation配置文件名为UserAction-save-validation.xml,则只有UserAction的save方法在执行前会通过该校验文件做校验。


validation type required和requiredstring 的区别:
required validator
http://struts.apache.org/2.0.14/docs/required-validator.html
requiredstring validator:
http://struts.apache.org/2.0.14/docs/requiredstring-validator.html



编程式验证:
http://taink.iteye.com/blog/565690(or:http://51jsp.cn/a/struts/20100108/5545.html)
引用
struts2 对action中的方法校验流程:
* 1.类型转换器对请求参数执行类型转换,并将转换后的值赋给action 中的属性
* 2.如果在执行类型转换的过程中出现异常,系统会将异常信息保存到ActionContext,conversionError 拦截器将异常信息添加到fieldErrors里,不管类型转换是否出现异常,都会进入第3步.
* 3.系统通过反射技术先调用action 中的validateXxxx()方法,Xxxx为方法名.
* 4.再调用action中的validate()方法.
* 5.经过上面4步,如果系统中的fieldErrors存在错误信息,
* (即存放错误的集合的size 大于0,系统自动将请求转发至名称为input 的视图.如果fieldErrors 没有任何的错误信息,系统将执行action 中处理方法)

http://ttitfly.iteye.com/blog/150304
引用
struts2标签写的form表单
1. 只有FieldError级别错误才会自动显示出来,不再需要使用类似这样的标签:<s:fielderror/>
2. 验证出错的话,如果跳到form表单页面,那么会自动保留上次填入的表单信息
3. FieldError级别错误信息都会在每个Filed的上面显示
4. ActionError级别的错误会整体显示在一起,并且需要使用标签:<s:actionerror/>
5. 类型转换错误是属于FieldError级别的
6. ActionError是都放在List里的,而FieldError是放在Map里的
7. validateExecute invoke...
   validate invoke..
   或者
   testValidate invoke...
   validate invoke...
   可以知道validate方法始终会被执行。





Q:如果同时使用了编程式和声明式验证验证了同一东西,会先执行哪个?
A:经验证,会先执行编程式验证。
例子如下:
引用
i18n文件actionClass.properties:
validation.requiredstring.steelgradeId=钢种ID为必填项

编程式save()方法验证:
public void validateSave() {
    ....
    if(entity.getSteelgradeId()==null || "".equals(entity.getSteelgradeId()) {
        this.addActionError("steelgradeId 非空!");
    }
}

声明式save action(method配的就是save()方法)验证文件actionClass-save-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>
	<!-- the Non Field Validator is execute before than Field Validator.-->
	<validator type="requiredstring"> 
		<param name="fieldName">steelgradeId</param> 
	    <param name="trim">true</param>
	    <message>${getText("validation.requiredstring.steelgradeId")}</message> 
	</validator>
</validators>

最终输出结果:




关于struts2验证框架出现的“Invalid field value for field "xxxField"”:
引用
在xwork-2.0.4.jar\com\opensymphony\xwork2\xwork-messages.properties中定义的该验证信息;若未在struts.xml中指定struts.custom.i18n.resources,也未在actionName.properties中指定invalid.fieldvalue.xxxField=出错信息,则在出现类型转换错误的时候会使用xwork-messages.properties中的i18n出错配置,出现“Invalid field value for field "xxxField"”
http://wing123.iteye.com/blog/415211
http://www.java3z.com/cwbwebhome/article/article2/21084.html










Interceptor
http://www.blogjava.net/max/archive/2006/12/06/85925.html

为什么struts2控制台不打印出错信息:
http://guangyao-yao.iteye.com/blog/812279
struts2配合log4j打印异常栈信息:
http://tdcq.iteye.com/blog/706459











Struts2 i18n:
http://wuaner.iteye.com/blog/643987



  • 大小: 5 KB
分享到:
评论

相关推荐

    Struts2漏洞检查工具Struts2.2019.V2.3

    Struts2是一款非常流行的Java Web框架,用于构建企业级应用。然而,随着时间的推移,Struts2在安全方面暴露出了一些重要的漏洞,这给使用该框架的系统带来了潜在的安全风险。"Struts2漏洞检查工具Struts2.2019.V2.3...

    struts2jar包

    Struts2是一个强大的Java EE应用程序框架,主要用于构建企业级的Web应用。它的核心是MVC(Model-View-Controller)设计模式,可以帮助开发者组织代码,提高开发效率,并且提供了丰富的特性来支持表单验证、国际化、...

    struts2项目开发

    Struts2 项目开发 Struts2 是一个基于 Java Web 的框架,广泛应用于 Web 应用程序的开发。下面将从 Struts2 项目开发的角度,详细介绍 Struts2 框架的应用、开发流程、技术架构、实践经验等方面的知识点。 项目...

    Struts2视频教程

    ### Struts2核心知识点解析 #### 一、Struts2框架概述 - **定义与特点**:Struts2是一款基于MVC(Model-View-Controller)设计模式的Java Web应用程序框架,它继承了Struts1的优点,同时在设计上更加灵活、易用,...

    struts2-core.jar

    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,...

    Struts2VulsTools-Struts2系列漏洞检查工具

    该工具的打开路径为:\Struts2VulsTools-2.3.20190927\Test\bin\Release\Text.exe 2019-09-25: 优化部分EXP在部分情况下被WAF拦截的问题,提高检测成功率,优化自定义上传路径exp,文件所在目录不存在时自动创建...

    Struts2接口文档

    Struts2是一个强大的Java web应用程序开发框架,它基于Model-View-Controller(MVC)设计模式,旨在简化创建用户交互式、数据驱动的web应用的过程。这个“Struts2接口文档”是开发者的重要参考资料,提供了关于...

    struts2-showcase.rar

    Struts2-showcase是一个用于演示和学习Apache Struts2框架功能的开源项目。这个压缩包“struts2-showcase.rar”包含了完整的源代码,旨在帮助开发者深入理解Struts2框架的工作原理及其各种特性。以下是对Struts2和...

    struts2中文学习文档

    从给定的文件信息来看,标题“struts2中文学习文档”和描述“struts2的根本webwork2”表明这是一份关于Struts2框架的学习资料,特别强调了Struts2与WebWork2的关系。Struts2是Apache Struts的一个版本,它是一个用于...

    Struts2+Jquery+Ajax

    "struts2 jar"文件包含了Struts2框架的核心库,可能包括struts2-core、struts2-convention、struts2-json-plugin等依赖,这些是开发Struts2应用必不可少的组件。 "Struts2"可能是项目实例代码,包括Action类、视图...

    struts2所有jar包程序文件

    Struts2是一个非常著名的Java Web开发框架,由Apache软件基金会维护。它基于MVC(Model-View-Controller)设计模式,极大地简化了构建基于Java EE的Web应用程序的过程。本资源包含"struts2所有jar包程序文件",是...

    Struts2_s2-016&017&ognl2.6.11_patch漏洞补丁

    -- 为修复struts2 s2-016、s2-017漏洞,重写DefaultActionMapper --&gt; &lt;bean type="org.apache.struts2.dispatcher.mapper.ActionMapper" name="myDefaultActionMapper" class=...

    Struts2教学视频

    Struts2是一个强大的Java web开发框架,用于构建可维护、可扩展且结构良好的应用程序。它在MVC(Model-View-Controller)设计模式的基础上提供了一种实现方式,使得开发者能够更方便地处理用户请求,控制业务逻辑,...

    张龙圣思园struts2学习笔记word

    Struts2是Apache软件基金会下的一个开源框架,主要用于构建企业级的Java web应用程序。张龙圣思园的Struts2学习笔记,无疑为Java开发者提供了一份宝贵的参考资料,它可能涵盖了Struts2的基础概念、核心组件、配置...

    struts2 chm 帮助文档

    struts2 chm 程序包 org.apache.struts2 接口概要 接口 说明 StrutsStatics Constants used by Struts. 类概要 类 说明 RequestUtils Request handling utility class. ServletActionContext Web-specific ...

    Struts2开发常用jar包

    包含struts2-core-2.5.10.1.jar,struts2-jfreechart-plugin-2.5.10.1.jar,struts2-json-plugin-2.5.10.1.jar,struts2-junit-plugin-2.5.10.1.jar,struts2-bean-validation-plugin-2.5.10.1.jar,struts2-cdi-...

    最新版本的Struts2+Spring4+Hibernate4框架整合

    整合使用最新版本的三大框架(即Struts2、Spring4和Hibernate4),搭建项目架构原型。 项目架构原型:Struts2.3.16 + Spring4.1.1 + Hibernate4.3.6。 此外,还有:log4j、slf4j、junit4、ehcache等知识点。 项目...

    全网最全Struts 2 全版本漏洞检测工具,最新struts漏洞更新

    Struts 2是一款基于Java的开源MVC框架,它在Web应用开发中广泛使用,但同时也因其复杂的架构和历史遗留问题,成为了网络安全的焦点。这个标题提到的是一个全面的Struts 2漏洞检测工具,旨在帮助开发者和安全专家识别...

    struts2 总结工程大全

    struts2 总结工程大全struts2 总结工程大全struts2 总结工程大全struts2 总结工程大全struts2 总结工程大全struts2 总结工程大全struts2 总结工程大全struts2 总结工程大全struts2 总结工程大全struts2 总结工程大全...

    Struts2漏洞测试

    Struts2漏洞测试Struts2漏洞测试Struts2漏洞测试Struts2漏洞测试Struts2漏洞测试Struts2漏洞测试Struts2漏洞测试Struts2漏洞测试Struts2漏洞测试Struts2漏洞测试Struts2漏洞测试Struts2漏洞测试Struts2漏洞测试...

Global site tag (gtag.js) - Google Analytics