在校验之前,首先进行类型转换,如果类型转换失败,则直接报错
Action类中,复写validate()方法
public void validate() {
if (null == this.getUsername() || "".equals(this.getUsername().trim())) {
this.addFieldError("username", "username required");
}
if (null == this.getPassword() || "".equals(this.getPassword().trim())) {
this.addFieldError("password", "password required");
}
}
addFieldError()方法含义为,指定参数1控件的错误信息为参数2,错误信息会显示在参数1控件的上方剧中位置,但这个前提是使用struts标签。如果没有使用struts标签,则需要在页面内添加:<s:fieldError></s:fieldError>错误信息反馈在此标签的位置
配置struts.xml文件
需要为你的action配置一个input result,因为struts验证机制是:一旦验证没有通过,则自动定向到input结果
<action name="register" class="com.test.action.RegisterAction">
<result name="success">/success.jsp</result>
<result name="input">/register.jsp</result>
注意:input结果必须为dispatcher方式,
调用顺序为:setXxx();validate();execute()
1. 通过转换器将请求参数转换成相应的Bean属性;
2. 判断转换过程是否出现异常。如果有,则将其保存到ActionContext中,conversionError拦截器再封装为fieldError;如果没有,进行下一步;
3. 通过反射(Reflection)来调用validateXxx()方法(其中,Xxx表示Action的方法名);
4. 调用validate()方法;
5. 如果经过上述步骤没有出现fieldError,则调用Action方法;如果有,则会跳过Action方法,通过国际化将fieldError输出到页面。
遇到类型转换错误的时候(也就是说不能进行类型转换),struts2框架自动生成一条错误信息,并且将该错误信息放到addFieldError里面
类型转换与输入校验的流程
1. 首先Struts2对客户端传来的数据进行类型转换
2. 类型转换完毕后再进行输入校验
3. 如果类型转换和输入校验都没有错误发生,那么进入execute方法(调用商业逻辑)
注意:如果类型转换不成功,也同样要进行输入校验
类型转换出错,自动将错误信息添加到addFieldError中。
这样的机制反馈不够友好, 那么我们采用一种方式来替代struts2自动生成的错误信息:
全局资源转化文件:
在struts.xml文件struts根标签内,加入:
<constant name=”struts.custom.i18n.resources” value=”message” > </constant>
name值 为struts2内置的 要用message来替换他
配置message.properties 在WEB-INFO\classes下
含义为:只要类型转化有错误, 就赋予其默认值0,然后反馈错误信息“error”
局部资源转化文件:
配置与action类同名的properties文件(同一目录下)
文件内容:
含义为:当你关联的action类中的age属性转化错误时, 反馈信息为”age conversion error”
native2ascii.exe使用
第一种方式:输入,然后输出为unicode
第二种方式:文件转化为文件
源文件,目标文件
default.properties
struts2错误有两种
一种是field级别的;另一种是action级别的
addActionError()
struts2表单标签内置提示错误机制, 但仅限于fieldError
addFieldError()将错误信息添加到Map中;addActionError()添加到Collection中
显示ActionError需要在视图中加入<s:actionerror />Struts2标签
theme=””属性 主题;simple表示不使用表格,并且显示fielderror机制失效。 使用theme=simple 则使struts标签封装的额外功能失效。如label失效, 等等
如果action 具有method属性, 则执行method指定的方法, 跳过execute方法
public String execute() throws Exception{}
public String Abc() throws Exception{}
void abc() 方法于execute除了名字不同 其他全部相同, 包括执行机制
配置多个逻辑的action
既然有多个处理业务逻辑的方法, 则需要多个验证类 , 下面是解决方案
方法名为abc() 则 abc 的验证方法为 validateAbc()
对于一个action来说, 如果你有自定义的方法,以及验证方法,
首先执行validateAbc()方法;然后无论validateAbc()是否通过都去执行validate()方法. 也就是说validate()是必须执行的; 如果这其中没有任何转化错误和验证错误, 才去执行相应的业务逻辑方法.
但是这种机制不合理, 因为自定义方法已经有自己的验证方法, 无需调用validate()方法。 解决方式有两个:1、将validate() 内容写为空。2、将validate()方法改名为validateExecute()
- 大小: 9.5 KB
- 大小: 13.9 KB
- 大小: 10.6 KB
- 大小: 4.4 KB
- 大小: 2.3 KB
- 大小: 3.7 KB
- 大小: 13.8 KB
- 大小: 25.2 KB
分享到:
相关推荐
#### 二、Struts2 的核心组件分析 **控制器**: - **Servlet VS Filter**: - **Servlet**: - 在内存中唯一实例。 - 可以设置 `load-on-startup` 属性使其在服务器启动时初始化。 - 用户每次请求都会调用 `void ...
- **框架原理**:Struts2提供了强大的输入校验功能,可以自动检查用户提交的数据是否符合预期。 - **配置方式**: - 使用注解方式(适用于Struts2较新版本)。 - 在`struts.xml`或Action类中通过配置文件的方式...
本篇笔记将详细讲解Struts2中服务器端与客户端对表单数据的校验方式。 首先,Struts2提供了一系列内置的校验器,包括: 1. Irequired:检查字段是否为空,是必填项。 2. IIrequiredstring:验证字段是否为非空字符...
5. **类型转换与输入校验**:Struts2在类型转换过程中也会进行基本的校验,如检查非空、数值范围等。 **四.Struts2的核心:拦截器** 拦截器是Struts2的核心组件,它们在Action执行前后介入处理流程。拦截器可以...
本学习笔记主要探讨了Struts2中的校验器(Validator)和校验框架,帮助开发者理解如何有效地实现数据验证,确保应用程序的健壮性。 首先,我们来看Struts2的校验框架。这个框架提供了强大的功能,可以对用户输入...
- **灵活的输入校验**:Struts2支持针对特定方法的校验逻辑,可以通过XML配置或Java代码的方式进行校验规则的定义。 - **丰富的国际化支持**:Struts2支持在全局、包以及Action级别配置资源文件,从而实现了更精细...
Struts2提供了一系列的注解和配置选项来支持这些功能,例如`@Validated`进行数据校验,`@ExceptionHandler`处理异常,以及`struts.xml`或`struts.properties`中的结果配置。通过这些工具,我们可以构建出健壮且易于...
5. **输入校验改进**:Struts2的输入校验功能得到了显著增强,它可以针对特定的方法进行校验,解决了Struts1中存在的问题,提高了开发效率。 6. **国际化支持**:Struts2提供了更好的国际化支持,可以方便地管理...
在Struts2的学习过程中,第五讲主要探讨的是输入验证,这是确保应用程序数据安全和准确性的关键步骤。输入验证通常发生在客户端和服务器端,防止恶意数据的提交,并确保用户输入的数据符合预设的格式和规则。 首先...
在第六讲中,我们将深入探讨Struts2的输入验证机制,这是确保应用程序数据安全性和正确性的重要环节。Struts2的输入验证可以分为客户端验证和服务器端验证,两者都有其优点和适用场景。 首先,客户端验证通常使用...
在本篇“Struts2学习笔记三”中,我们将聚焦于Struts2的类型转换这一核心特性。类型转换在处理用户提交的数据时非常关键,它允许Struts2自动将请求参数转换为Java对象的属性。 在Struts2中,类型转换主要由`...
本讲主要探讨Struts2的校验框架,它提供了对用户输入数据进行验证的功能,确保数据的有效性和安全性。 在传统的MVC模式中,数据验证通常在控制器或模型层进行,但在Struts2中,校验逻辑被移到了专门的校验框架中,...
在第九讲中,我们将深入探讨Struts2的校验框架,这是一个非常重要的功能,它有助于确保输入数据的准确性和完整性,防止非法数据导致的系统异常。 在传统的Java web开发中,数据验证通常在服务器端进行,如Servlet或...
Struts2 学习笔记-part2: 实现用户登录功能 在上一部分中,我们了解了构建一个基于Struts2的Java Web项目所需的基本库和配置文件。现在,我们将逐步实现一个简单的用户登录功能。 一、创建Action类 在Struts2框架...