用struts2标签库来实现Struts2数据输入校验---函数验证的基本原理:
错误消息分为field级和action级,都在ActionSupport类中预定义了,不同的是,
fieldError是通过一个Map来实现,事实上记录了field的名字和错误信息,因此能在页面上对应的field中显示;
而actionError是通过一个Collection实现,没有记录报错的来源,只记录了错误信息。
注意,下面是简要流程:
(1)页面提交到action之后,首先struts会尝试对输入的字符串信息根据Action中定义的属性类型进行类型匹配及转换,如果输入为空,它会将内容置为该类型的缺省值(0、0.0、空字符串等等),对于数据格式不匹配的情况,比如说在age栏里面输入字母等等,struts会自动提示默认的错误,并返回input,这一工作是struts2自动完成的。
(2)然后,验证机制生效,调用validate()函数和XML验证框架中的验证逻辑(《Struts2 数据输入校验(2) —— XML验证 》会提到),检查的同时会因为验证错误调用了addFieldError()和addActionError()。页面提交之前,struts会调用ActionSupport(严格说是ValidationAware接口)的hasErrors()方法,该方法很简单,就是检查fieldError的Map和actionError的Collection是否为空,如果均为空,则调用execute()方法
进行业务逻辑的调度,否则返回error。
(3)最后,程序会根据返回信息执行forward操作,struts.xml中则定义了这些返回值所对应的跳转逻辑。
如果有错误返回,错误信息会在页面上提示
在Action中所有addFieldError()设置的信息将在对应的field位置显示;
在Action中所有addActionError()设置的信息将不会显示,除非在页面中定义了s:actionerror控件,那么错误将以ul的格式显示。
对多验证和跳转逻辑的支持
对于一些Action如果需要重用,struts也提供了支持。
上述
处,你也可以指定其它任意的名字,这需要在struts.xml中修改对应action的method属性
<action name="XXXAction" class="com.myspace.myname.XXXAction" method="newExcuteName">
<result>success.jsp</result>
</action>
同时在XXXAction中我们需要定义一个方法
public String newExcuteName(){ /*dummy code*/ }
如果同时还定义了
public void validateNewExcuteName(){ /* dummy code */ }
那么在执行validate()之前,程序会先执行validateNewExcuteName()方法
可以考虑把所有公用的验证逻辑放到validate()方法中
上述过程完全是靠java反射机制实现的,效率会低一些,所以除非真有必要,否则不用。
错误提示字符串的本地化
在validator方法中直接写错误信息固然方便,但不算是一个好习惯,同时也不能支持本地化。下面简单说明本地化的两种方式
1、全局国际化默认的错误提示,首先在struts.xml中加入常量
<struts>
<constant name="struts.custom.i18n.resources" value="message"></constant>
</struts>
然后在与struts.xml同级的位置建立message.properties中写入
xwork.default.invalid.fieldvalue={0} error
2、针对某个Action的验证错误提示
在与XXXAction同级目录下建立与该Action同名的属性文件
XXXAction.properties中写入
invalid.fieldvalue.字段名=错误信息
两种验证机制的执行顺序
先执行validation.xml,后执行Action内部的validate()方法。
ActionSupport类对ActionError和FieldError的实现细节
在ActionAware接口中声明的
ActionError,ActionMessage: Collection<String>
FieldError: Map<String,List<String>>
ActionSupport组合了一个实现了ValidationAware的ValidationAwareSupport来继承ValidationAware接口:
ValidationAwareSupport类内部声明了三个私有变量,
其中
actionMessage = new ArrayList<String>();
actionError = new ArrayList<String>();
fieldErrors = new LinkedHashMap<String, List<String>>();
FieldErrors需要注意的一点
我们往FieldErrors中添加错误的时候,需要调用addFieldError(),而不应该调用getFieldErrors().put()函数.
这两个方法看起来是一样的,其实不然。
getFieldErrors()在实现的时候返回的是fieldErrors的一个可写副本,修改这个副本不会真正将错误传入fieldErrors中去。addFieldError()才是真正向fieldErrors中添加内容
分享到:
相关推荐
这个框架是MVC(模型-视图-控制器)设计模式的实现,极大地简化了开发流程,并且提供了丰富的功能来处理HTTP请求、表单提交、数据验证以及页面展示等任务。 Struts2的核心概念包括Action、Result、Interceptor和...
2. **拦截器(Interceptors)**:Struts2的拦截器机制使得开发者能够轻松实现如日志记录、权限验证、数据校验等通用功能,无需在每个Action中重复编写代码。 3. **配置灵活性**:Struts2允许通过XML或注解进行配置...
3. **视图渲染**:`struts2-xwork-core.jar` 包含XWork框架,它是Struts2的基础,负责处理动作、类型转换和验证。 4. **依赖库**:Struts2依赖于其他开源库,如`ognl.jar`(Object-Graph Navigation Language),...
XWork是Struts 2的基础,提供了一套强大的机制来处理请求、业务逻辑和数据验证。 2. **core**: 这部分主要包含Struts 2框架的基本结构和组件,如ActionContext、Dispatcher、PlugIn和配置管理。它负责处理HTTP请求...
1. **OGNL表达式解析**:OGNL是Struts2中用于数据绑定和表达式语言的关键组件。理解其工作原理,包括如何解析和执行表达式,是研究S2-016漏洞的基础。你需要深入学习OGNL的语法和执行模型,以及它在Struts2中的应用...
2. **拦截器(Interceptors)**:拦截器是Struts2强大的功能之一,它们在动作执行前后按顺序执行,可以实现如事务管理、权限验证、日志记录等通用功能。 3. **结果类型(Result Types)**:Struts2支持多种结果类型...
7. **数据验证**:内置的Validation框架提供了模型数据的校验功能,通过XML或注解方式定义验证规则。 8. **Ajax支持**:Struts2可以通过JsonResult或者dojo插件实现异步请求的处理,提升用户体验。 深入研究Struts...
在"Struts2_Android(2.2)_模拟数据访问项目 JSON项目"中,我们聚焦于使用Struts2框架与Android客户端进行JSON数据交互。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也...
- **框架支持**:Struts2 提供了丰富的服务,如自动数据接收、类型转换、数据验证等。 - **国际化的支持**:支持多语言环境,便于国际化应用。 #### 二、Struts2 核心组件详解 **2.1 模型(Model)** - **功能**:...
Struts2.2 JAR包是Java开发中的一个重要组件,它是Apache Struts框架的一个特定版本。Struts2是一个开源的MVC(Model-View-Controller)框架,用于构建基于Java的Web应用程序。这个框架旨在提供一种更高效、更灵活的...
6. **Struts2-json-plugin**: 提供JSON支持,使得Struts2可以处理AJAX请求和返回JSON格式的数据。 7. **Struts2-tiles-plugin**: 集成Tiles框架,提供页面布局和模板功能。 8. **Struts2-freemarker-plugin**: 与...
3. **插件**:Struts2支持多种插件来扩展其功能,例如JSON、XML、Ajax支持,以及数据验证和国际化等。 4. **Struts2的标签库**:包含一系列自定义的JSP标签,如`s:form`、`s:textfield`,便于开发者创建表单和处理...
标题“Spring之Spring2.5集成Struts2.2”涉及到的是在Web开发中整合两个非常流行的开源框架——Spring和Struts2的过程。这个过程旨在利用Spring的强大IoC(Inversion of Control,控制反转)和AOP(Aspect Oriented ...
总之,"struts2.2.3.1帮助文档"是开发者学习和使用Struts2框架的重要参考资料,包含了从基础概念到高级特性的全面介绍,对于提升Java Web开发技能大有裨益。通过深入阅读和实践,开发者可以更好地掌握Struts2框架,...
9. **表单和验证**:Struts2提供了强大的表单处理和验证功能,能够轻松实现前端表单与后端数据模型的绑定,以及对用户输入的验证。 10. **模板技术**:Struts2支持多种模板技术,如JSP、FreeMarker、Velocity等,...
2. **拦截器(Interceptors)**:Struts 2使用拦截器来处理请求,如日志、事务管理和验证。拦截器链允许开发者在不修改Action代码的情况下添加额外的功能。 3. **OGNL(Object-Graph Navigation Language)**:...
3. **拦截器(Interceptor)**:Struts 2的拦截器机制允许开发者在Action执行前后添加自定义逻辑,如日志、权限验证等,增强了框架的功能和灵活性。 4. **配置文件**:默认使用struts.xml文件进行配置,包括Action...
6. **类型转换与数据校验**:Struts 2内置了类型转换机制和数据校验框架,能够自动处理表单提交的数据类型转换和验证。 7. **Action与结果映射**:通过Action和Result的映射,Struts 2能根据Action执行结果跳转到...
6. **OGNL(Object-Graph Navigation Language)**:Struts 2使用OGNL作为表达式语言,它允许开发者在Action与视图之间轻松地传递数据,提供了强大的数据访问和表达能力。 7. **插件体系**:Struts 2有一个强大的...
Struts2.2.3.1 API文档是一个重要的资源,对于深入理解和开发基于Struts2框架的应用程序至关重要。Struts2是一个流行的Java开源MVC框架,用于构建企业级Web应用程序。2.2.3.1是该框架的一个版本,包含了众多的改进和...