- 浏览: 519368 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (278)
- java (41)
- 设计模式 (4)
- sql (10)
- webservice (2)
- spring (9)
- struts (6)
- struts2 (32)
- hibernate (27)
- Struts_hibernate_Spring整合 (4)
- Velocity (1)
- Servlet (9)
- JSP (6)
- javascript (19)
- jquery (10)
- ajax (4)
- html、xml (3)
- JDBC (2)
- JDK (6)
- mysql (2)
- oracle (11)
- SqlServer (1)
- DB2 (4)
- tool (7)
- linux (5)
- UML (1)
- eclipse (8)
- 执行文件 (1)
- 应用服务器 (4)
- 代码重构 (1)
- 日本語 (19)
- 交规 (1)
- office (9)
- firefox (1)
- net (1)
- 测试 (1)
- temp (6)
- 对日外包 (1)
- windows (1)
- 版本控制 (1)
- android (2)
- 项目管理 (1)
最新评论
一。
1.继承 ActionSupport
ActionSupport 已经实现了 Action 接口,还实现了 Validateable 接口,提供数据校验功能。
在 Validateble 接口定义了一个 validate() 方法,重写该方法,如果校验表单输入域出现出错,则将错误添加到 ActionSupport 类的 fieldErrors 域中,然后通过 OGNL 表达式负责输出。
import com.opensymphony.xwork2.ActionSupport; import com.opensymphony.xwork2.ActionContext; //继承ActionSupport来实现Struts 2的Action类 public class LoginAction extends ActionSupport { //下面是Action内用于封装用户请求参数的两个属性 private String username; private String password; //username属性的getter和setter方法 public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } //password属性的getter和setter方法 public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } //处理用户请求的execute方法 public String execute() throws Exception { //当用户请求参数的username等于crazyit,密码请求参数为leegang时, //返回success字符串,否则返回error字符串 if (getUsername().equals("crazyit") && getPassword().equals("leegang")) { //通过ActionContext对象访问Web应用的HTTP Session ActionContext.getContext().getSession() .put("user" , username); return SUCCESS; } else { return ERROR; } } //完成输入校验需要重写的validate方法 public void validate() { //如果用户名为空,或者用户名为空字符串 if (getUsername() == null || getUsername().trim().equals("")) { //添加校验错误提示,使用getText方法来使提示信息国际化 //非国际化 addFieldError("username", "失败!")); addFieldError("username", getText("user.required")); } //当密码为空,或者密码为空字符串时,添加表单校验错误 if (getPassword() == null || getPassword().trim().equals("")) { addFieldError("password", getText("pass.required")); } } }
下面的 Action 类重写了 validate 方法,该方法会在 execute 方法之前执行,如果执行该方法之后,Action 类的 fieldErrors中已经包含了数据校验错误,请求将被转发 到 input 逻辑视图出,所以 在 struts.xml 中 要配置 input ,如下:
<?xml version="1.0" encoding="GBK"?> <!-- 指定Struts 2配置文件的DTD信息 --> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd"> <!-- struts是Struts 2配置文件的根元素 --> <struts> <!-- Struts 2的Action必须放在指定的包空间下定义 --> <package name="strutsqs" extends="struts-default"> <!-- 定义login的Action,该Action的实现类为lee.LoginAction类 --> <action name="login" class="lee.LoginAction"> <!-- 定义处理结果和视图资源之间映射关系 --> <!-- 定义input的逻辑视图名,对应login.jsp页面 --> <result name="input">/login.jsp</result> <result name="error">/error.jsp</result> <result name="success">/welcome.jsp</result> </action> <!-- 定义获取图书的Action,对应实现类为lee.GetBooksAction --> <action name="getBooks" class="lee.GetBooksAction"> <!-- 如果处理结果返回login,进入login.jsp页面 --> <result name="login">/login.jsp</result> <!-- 如果处理结果返回success,进入showBook.jsp页面 --> <result name="success">/showBook.jsp</result> </action> </package> </struts>
支持国际化
getText(key) 方法可以根据资源文件加载获得国际化提示信息
public void validate() { //如果用户名为空,或者用户名为空字符串 if (getUsername() == null || getUsername().trim().equals("")) { //添加校验错误提示,使用getText方法来使提示信息国际化 //非国际化addFieldError("username", "失败!")); addFieldError("username", getText("user.required")); } //当密码为空,或者密码为空字符串时,添加表单校验错误 if (getPassword() == null || getPassword().trim().equals("")) { addFieldError("password", getText("pass.required")); } }
<%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %> <!-- 导入Struts 2标签库 --> <%@taglib prefix="s" uri="/struts-tags"%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title><s:property value="getText('loginPage')"/></title> <meta name="website" content="http://www.crazyit.org" /> </head> <body> <!-- 使用form标签生成表单元素 --> <s:form action="login"> <!-- 支持国际化 --> <!-- 生成一个用户名文本输入框 --> <s:textfield name="username" key="user"/> <!-- 生成一个密码文本输入框 --> <s:textfield name="password" key="pass"/> <!-- 不支持国际化 --> <!-- 生成一个用户名文本输入框 --> <s:textfield name="username" label="用户名"/> <!-- 生成一个密码文本输入框 --> <s:textfield name="password" label="密 码"/> <!-- 生成一个提交按钮 --> <s:submit key="login"/> </s:form> </body> </html>
2.使用 Struts2 的校验框架
Action (不重写 validate 方法),却增加一个校验配置文件,配置文件通过 Struts2 已有的校验器,完成表单校验。Struts2 提供了大量的数据校验器,包括表单域校验器和飞表单域校验器2种。
以下使用了 requiredstring 校验器,该校验器是一个必填校验器------指定某个表单域必须输入
<?xml version="1.0" encoding="GBK"?> <!-- 指定校验规则文件的DTD信息 --> <!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.3//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd"> <!-- 校验规则定义文件的根元素 --> <validators> <!-- 校验第一个表单域:username --> <field name="username"> <!-- 该表单域必须填写 --> <field-validator type="requiredstring"> <!-- 如果校验失败,显示user.required对应的信息 --> <message key="user.required"/> </field-validator> </field> <!-- 校验第二个表单域:password --> <field name="password"> <field-validator type="requiredstring"> <!-- 如果校验失败,显示pass.required对应的信息 --> <message key="pass.required"/> </field-validator> </field> </validators>
ActionName-validation.xml:其中 ActionName 就是需要校验的 Action 的类名。
因此上面的校验规则文件应该命名为 "LoginAction-validation.xml",并且该文件应该与 Action 类的 class 文件位于同一个路径下。增加该检验规则文件后, LoginAction 不必重写 validate() 方法也可完成输入校验。
在 struts.xml 文件的 Action 定义中,一样需要为 input 逻辑视图指定物理视图资源,将 input 逻辑视图映射到 login.jsp
import com.opensymphony.xwork2.ActionSupport; import com.opensymphony.xwork2.ActionContext; //继承ActionSupport来实现Struts 2的Action类 public class LoginAction extends ActionSupport { //下面是Action内用于封装用户请求参数的两个属性 private String username; private String password; //username属性的getter和setter方法 public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } //password属性的getter和setter方法 public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } //处理用户请求的execute方法 public String execute() throws Exception { //当用户请求参数的username等于crazyit,密码请求参数为leegang时, //返回success字符串,否则返回error字符串 if (getUsername().equals("crazyit") && getPassword().equals("leegang")) { //通过ActionContext对象访问Web应用的HTTP Session ActionContext.getContext().getSession() .put("user" , username); return SUCCESS; } else { return ERROR; } } }
<!-- 定义login的Action,该Action的实现类为lee.LoginAction类 --> <action name="login" class="lee.LoginAction"> <!-- 定义处理结果和视图资源之间映射关系 --> <!-- 定义input的逻辑视图名,对应login.jsp页面 --> <result name="input">/login.jsp</result> <result name="error">/error.jsp</result> <result name="success">/welcome.jsp</result> </action>
<s:form action="login"> <!-- 生成一个用户名文本输入框 --> <s:textfield name="username" key="user"/> <!-- 生成一个密码文本输入框 --> <s:textfield name="password" key="pass"/> <!-- 生成一个提交按钮 --> <s:submit key="login"/> </s:form>
发表评论
文章已被作者锁定,不允许评论。
-
Struts1 与 Struts2 的12点区别
2011-11-16 11:14 7411) 在Action实现类方面 ... -
Struts 2 的 Ajax 支持(四)
2011-03-14 16:21 17435.4 tabbedpanel 标签 ... -
Struts 2 的 Ajax 支持(三)
2011-02-11 13:18 24365.2 submit 和 a 标签 ... -
Struts 2 的 Ajax 支持(二)
2011-01-27 14:08 2399四、 基于 Dojo 的 pub-sub 事件模型 ... -
Struts 2 的 Ajax 支持(一)
2011-01-20 14:55 2487一、 Ajax 概述 ... -
Struts 2 的拦截器(三)
2011-01-20 13:09 2908六、 拦截器示例 : 实现权限控制 权限检 ... -
Struts 2 的拦截器(二)
2011-01-12 16:38 1629四、 开发自己的拦截器 Struts 2 ... -
Struts 2 的拦截器(一)
2010-12-31 16:53 2022一、 理解拦截器 ... -
Struts 2 的标签库(五)
2010-12-29 11:35 11446.8 select 标签 以下代码 都是基 ... -
Struts 2 的标签库(四)
2010-12-24 16:21 1647六、 表单标签 表单标签,分为 2 种 : f ... -
Struts 2 的标签库(三)
2010-12-20 14:15 1973四、 数据标签 数据标签主要 ... -
Struts 2 的标签库(二)
2010-12-15 16:21 2031三、 控制标签 Str ... -
Struts 2 的标签库(一)
2010-12-13 13:47 1363一、 Struts 2 标签库概述 ... -
Struts 2 的国际化(二)
2010-12-09 13:25 2261二、 Struts 2 的国际化入门 ... -
Struts 2 的国际化(一)
2010-12-06 22:44 1307一、 程序国际化简 ... -
Struts2 上传和下载文件(三)
2010-12-03 14:58 1795三、 同时上传多个 ... -
Struts2 上传和下载文件(二)
2010-11-29 13:37 1984二、 Struts 2 的文件上传 ... -
Struts2 上传和下载文件(一)
2010-11-17 22:28 2088一、 文件上传的原理 1. 表单元 ... -
struts2 输入校验 (四)
2010-11-15 22:43 1217六、 手动完成输入校验 对于一些特殊的检验 ... -
struts2 输入校验 (三)
2010-11-08 13:25 1722五、 内建校验器 S ...
相关推荐
在Struts2中,校验器(Validator)是处理用户输入验证的核心组件,确保提交到服务器的数据符合预设的业务规则。这篇博客文章可能是关于如何使用Struts2的内置校验机制以及自定义校验规则的探讨。 Struts2的校验框架...
首先,我们来探讨"Struts2中的validation_多国语言版",这是Struts2的数据校验功能。Struts2提供了一种灵活的机制来验证用户输入,通过在Action类中定义校验规则或使用XML配置文件。当用户提交表单时,框架会自动...
在Struts2框架中,输入校验是确保数据完整性和安全性的重要环节。对于手动输入完成校验,Struts2提供了灵活的机制。 1. **普通处理方式**:在Action类中重写`validate()`方法是最常见的做法。此方法允许开发者...
在“Struts2数据校验与国际化”这一主题中,我们将深入探讨Struts2如何通过不同的验证机制确保数据的有效性,以及如何通过国际化功能提供多种语言的用户体验。 首先,数据校验是任何Web应用程序中的关键环节,它...
为了处理更复杂的数据校验场景,Struts 2支持使用Validator插件,它可以读取XML配置文件或者使用JSR 303/JSR 349(Bean Validation)标准来进行校验。通过Validator插件,可以定义全局的校验规则,复用性强,同时也...
在Struts2框架中,数据校验主要通过Action类的注解和Validation XML文件实现。Action类是处理用户请求的核心,通过在Action类的方法上添加注解,可以直接在控制器层进行数据校验。例如,可以使用`@Validated`注解...
这篇博客“Struts2 简单数据校验”可能详细介绍了如何在Struts2框架中实现对用户输入的有效性验证。 数据校验是任何Web应用程序中的核心部分,它涉及到多个方面,如必填字段、数据类型检查、长度限制、格式验证等。...
Struts2的数据校验主要通过Action类的属性注解和Validation.xml配置文件来实现。开发者可以使用注解的方式在Action类的属性上直接定义校验规则,例如`@NotEmpty`用于检查非空,`@Size(max=10)`用于限制字符串长度等...
1. **Struts2数据校验框架概述** - Struts2的数据校验框架是基于OGNL(Object-Graph Navigation Language)表达式语言和拦截器机制实现的。 - 它允许开发者定义校验规则在Action类的属性注释或者独立的校验配置文件...
1. **Struts2的校验框架**: Struts2提供了内置的验证框架,基于XML配置或者注解实现。这个框架允许开发者定义一组规则来检查用户提交的数据,这些规则可以在Action类中应用。 2. **XML输入校验**: - **创建校验...
Struts2集成Spring的Validation框架,允许开发者在Action类的属性上使用JSR303/JSR349(Bean Validation)注解进行数据校验。例如,`@NotNull`用于检查非空,`@Size(min=, max=)`限制字符串长度,`@Min`和`@Max`...
首先,Struts2的数据校验主要依赖于两个核心组件:Validation拦截器和Validator框架。Validation拦截器在Action执行前对请求参数进行校验,如果发现有不符合规则的数据,会阻止Action的执行并返回错误信息。...
当数据校验失败时,Struts2会自动将错误信息放入ActionContext,可以通过`ActionContext.getErrorMessages()`获取这些错误信息。在JSP页面中,可以使用Struts2的标签库如`s:fielderror`来显示错误信息。 6. **...
1. 类型转换器:Struts2将接收到的字符串参数转换为相应的数据类型,并将这些值赋给Action的属性。如果在此过程中发生异常,异常信息会被保存并由`conversionError`拦截器处理。 2. 客户端校验:Struts2支持在...
Struts2作为一款流行的Java Web开发框架,提供了一套强大的校验框架,使得开发者能够方便地对用户输入数据进行验证,确保数据的准确性和安全性。本文将深入探讨Struts2校验框架的应用,包括其核心概念、配置方式、...
在Struts2中,类型转换和数据校验是两个关键的特性,它们确保了用户输入的数据能够准确无误地被处理和验证,从而提高了应用的安全性和可靠性。 **类型转换(Type Conversion)** 在Struts2中,类型转换是自动进行...
在Struts2中,Validation框架是用于处理数据验证的重要组件,它允许开发者在用户输入提交到服务器之前或之后进行验证,确保数据的准确性和完整性。下面将详细解释Struts2中的Validation框架及其在前后台验证中的应用...
总结,Struts2的输入校验机制提供了手动和自动两种方式,结合配置文件和内置校验器,能够实现灵活且强大的数据校验,有效地防止了非法数据的流入,提升了系统的安全性。在实际开发中,开发者可以根据业务需求选择...