- 浏览: 522425 次
- 性别:
- 来自: 上海
-
文章分类
- 全部博客 (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 7471) 在Action实现类方面 ... -
Struts 2 的 Ajax 支持(四)
2011-03-14 16:21 17545.4 tabbedpanel 标签 ... -
Struts 2 的 Ajax 支持(三)
2011-02-11 13:18 24465.2 submit 和 a 标签 ... -
Struts 2 的 Ajax 支持(二)
2011-01-27 14:08 2413四、 基于 Dojo 的 pub-sub 事件模型 ... -
Struts 2 的 Ajax 支持(一)
2011-01-20 14:55 2498一、 Ajax 概述 ... -
Struts 2 的拦截器(三)
2011-01-20 13:09 2914六、 拦截器示例 : 实现权限控制 权限检 ... -
Struts 2 的拦截器(二)
2011-01-12 16:38 1646四、 开发自己的拦截器 Struts 2 ... -
Struts 2 的拦截器(一)
2010-12-31 16:53 2032一、 理解拦截器 ... -
Struts 2 的标签库(五)
2010-12-29 11:35 11556.8 select 标签 以下代码 都是基 ... -
Struts 2 的标签库(四)
2010-12-24 16:21 1656六、 表单标签 表单标签,分为 2 种 : f ... -
Struts 2 的标签库(三)
2010-12-20 14:15 1982四、 数据标签 数据标签主要 ... -
Struts 2 的标签库(二)
2010-12-15 16:21 2038三、 控制标签 Str ... -
Struts 2 的标签库(一)
2010-12-13 13:47 1369一、 Struts 2 标签库概述 ... -
Struts 2 的国际化(二)
2010-12-09 13:25 2268二、 Struts 2 的国际化入门 ... -
Struts 2 的国际化(一)
2010-12-06 22:44 1315一、 程序国际化简 ... -
Struts2 上传和下载文件(三)
2010-12-03 14:58 1808三、 同时上传多个 ... -
Struts2 上传和下载文件(二)
2010-11-29 13:37 1994二、 Struts 2 的文件上传 ... -
Struts2 上传和下载文件(一)
2010-11-17 22:28 2098一、 文件上传的原理 1. 表单元 ... -
struts2 输入校验 (四)
2010-11-15 22:43 1231六、 手动完成输入校验 对于一些特殊的检验 ... -
struts2 输入校验 (三)
2010-11-08 13:25 1730五、 内建校验器 S ...
相关推荐
在Struts2中,数据校验是确保用户输入合法性和应用安全的关键环节。本篇文章将详细介绍Struts2中两种数据校验方法以及常用的校验器。 1. **Action中的validate()方法** Struts2提供了`Validateable`接口,它包含...
除了手动校验之外,Struts2还提供了内置的Validation框架来简化校验过程。这种方式无需在每个Action类中重复编写校验逻辑,而是通过配置文件或注解来声明校验规则。 ##### 3.2 实例演示 下面是一个使用Validation...
- 当数据校验失败时,可以通过`addFieldError()`方法添加错误信息,Struts2会自动将这些错误信息传递到JSP页面。 7. **Struts2的框架校验**: - 另一种数据校验方式是通过ActionName-validation.xml文件配置校验...
本文将深入探讨Struts框架下的数据验证机制,包括如何使用`validate`方法进行验证以及如何利用Validation框架进行更高级的数据校验。 #### 使用`validate`方法验证数据 在Struts2中,最基础的数据验证方式是通过`...