[标题]:[原]Struts2输入校验
[时间]:2009-7-26
[摘要]:替换struts默认的类型转换错误信息、给Struts标签指定主题、使用自定义业务方法和验证方法。
[关键字]:浪曦视频,Struts2应用开发系列,WebWork,Apache,输入校验,validate,validation
[环境]:struts-2.1.6、JDK6、MyEclipse7、Tomcat6
[作者]:Winty (wintys@gmail.com) http://www.blogjava.net/wintys
[正文]:
1、知识点
a.validate()中添加验证错误信息
当校验出错时,可以向客户端输出两种类型的Error:
addFiledError() //可以用<s:filederror />显示,也可以直接由Struts输入标签自动显示。
addActionError() //用<s:actionerror />显示。
b.替换struts默认的类型转换错误信息
例如:如果为int型的age输入字母,将出现类型转换错误信息:Invalid field value for field "age"。
这个信息是由Struts自动提供的,可以使用全局或局部配置文件对其进行替换。
a).替换struts默认的类型转换错误信息的全局配置:
在struts.xml中增加constant,指明全局配置文件的名称为"message":
<struts>
<constant name="struts.custom.i18n.resources
" value="message">
</constant>
</struts>
在struts.xml相同目录下新建message.properties,message.properties内容可使用中文,但需要JDK的native2ascii进行转换。内容如下({0}代表出现错误的字段):
xwork.default.invalid.fieldvalue
={0} error
b).替换struts默认的类型转换错误信息的局部配置:
在RegisterAction.java相同目录下新建RegisterAction.properties("\u5E74\u9F84\u8F6C\u6362\u9519\u8BEF" = "年龄转换错误"):
invalid.fieldvalue.age
=\u5E74\u9F84\u8F6C\u6362\u9519\u8BEF
c.给Struts标签指定主题
<s:textfield name="name" label="name" theme="simple"
>
指定simple主题,则Struts不生成table等布局。
同时,不会显示label,也不会显示field errror。
但与HTML input不同的是,可以保存提交失败后的值。
d.指定自定义业务方法register()替代execute()
在struts.xml中配置:
<action name="register"
class="wintys.struts2.validation.RegisterAction"
method="register"
>
并在类RegisterAction中添加方法register(),与execute()签名相同:
public String register()throws Exception{
System.out.println("register()...");
return SUCCESS;
}
e.使用自定义验证方法validateRegister()
在类RegisterAction中添加方法validateRegister(),与validate()签名相同:
public void validateRegister(){
System.out.println("validateRegister()...");
}
validateRegister()并不替换validate(),而是先于validate()执行。Struts从struts.xml中的配置得知register(),而使用反射寻找validateRegister()。如果有validateRegister(),则执行之。然后再执行validate()。执行流程:validateRegister() => validate() => register()。
f.最佳实践
给默认execute()指定另一个validateExecute(),而不重写validate()。不把所有验证写在validate()中,则可以根据需要执行个性化验证。
2、详细代码
/StrutsHelloWorld/WebRoot/validation/input.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>struts validation</title>
</head>
<body>
<s:actionerror cssStyle="color:red"/>
<s:fielderror></s:fielderror>
<s:form name="register" action="register" theme="simple">
用户名:<s:textfield name="name" label="用户名"></s:textfield><br/>
密码:<s:textfield name="age" label="年龄"></s:textfield><br/>
<s:submit value=" 确定 "></s:submit> <br/>
</s:form>
</body>
</html>
/StrutsHelloWorld/WebRoot/validation/output.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head>
<body>
<s:property value="name"/><br/>
<s:property value="age"/><br/>
</body>
</html>
/StrutsHelloWorld/src/wintys/struts2/validation/RegisterAction.java:
package wintys.struts2.validation;
import com.opensymphony.xwork2.ActionSupport;
/**
*
* @author Winty (wintys@gmail.com)
* @version 2009-07-26
* http://www.blogjava.net/wintys
*/
@SuppressWarnings("serial")
public class RegisterAction extends ActionSupport {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public void validate() {
System.out.println("validate()...");
//Action Error
if(name == null || name.length() < 6 || name.length()>10){
addActionError("invalid name");
}
//Filed Error
if(age <= 0 || age > 150){
addFieldError("age", "invalid age");
}
}
@Override
public String execute() throws Exception {
System.out.println("execute()...");
return SUCCESS;
}
/**
* 自定义验证方法,用于验证register()。
*
* 如果客户端请求的action name="register" ,
* 该验证会自动执行。
*/
public void validateRegister(){
System.out.println("validateRegister()...");
}
/**
* 自定义method,代替execute(),
* 则最终只运行register() , 而不运行execute()。
*
* 需在struts.xml中配置:method="register"
* <action name="register"
* class="wintys.struts2.validation.RegisterAction"
* method="register">
*/
public String register()throws Exception{
System.out.println("register()...");
return SUCCESS;
}
}
/StrutsHelloWorld/src/wintys/struts2/validation/RegisterAction.properties:
invalid.fieldvalue.age=\u5E74\u9F84\u8F6C\u6362\u9519\u8BEF
/StrutsHelloWorld/src/struts.xml:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<!-- 定义全局错误信息资源文件message.properties -->
<constant name="struts.custom.i18n.resources" value="message"></constant>
<package name="MyStruts" extends="struts-default">
<action name="register" class="wintys.struts2.validation.RegisterAction" method="register">
<result name="success">/validation/output.jsp</result>
<result name="input">/validation/input.jsp</result>
</action>
</package>
</struts>
/StrutsHelloWorld/src/message.properties:
#chinese characters needs conversion by "native2ascii"
xwork.default.invalid.fieldvalue={0} error.
[参考资料]:
《浪曦视频之Struts2应用开发系列》
[附件]:
源代码: struts_StrutsValidation.zip
分享到:
相关推荐
在Struts2中,校验框架是一个核心组件,它负责处理用户输入的数据验证,确保数据的正确性和完整性。以下是对Struts2校验框架的详细讲解。 1. **Struts2验证框架的基本概念** Struts2的验证框架主要负责在用户提交...
5. **数据校验**:Struts2有强大的数据校验框架,可以在Action执行前对用户输入进行验证,提高了应用的安全性和用户体验。 6. **异常处理**:Struts2提供了全局的异常处理机制,可以统一处理应用中可能出现的异常,...
在Struts的第六讲中,我们主要探讨了如何有效地利用Validate进行数据校验,以确保用户提交的信息符合应用程序的要求。 Struts的验证框架提供了一种声明式的方式来定义验证规则,这些规则可以在ActionForm类的子类中...
- **配置文件**:Struts2的核心配置文件是`struts.xml`,用于定义Action、结果类型、拦截器等。 2. **登录Action创建** - **Action类**:创建一个Java类,继承自Struts2提供的ActionSupport类,定义登录相关的...
6.3.3应用struts2输入校验框架 128 6.3.4自定义校验器 130 6.4国际化 131 6.4.1国际化实现原理 131 6.4.2准备国际化资源文件 131 6.4.3调用国际化资源文件 134 6.5上传和下载 135 6.5.1文件上传的实现原理 ...
同时,“采用Ajax异步实现校验”意味着在用户输入数据时,系统会使用Ajax技术实时验证信息的正确性,无需刷新整个页面,提升了用户体验。Ajax(Asynchronous JavaScript and XML)是一种在不刷新整个页面的情况下与...
当用户提交表单时,Struts2框架会自动将输入的验证码与session中的验证码进行比较,如果匹配则通过验证,否则提示错误。 总结,通过Struts2实现验证码功能,主要涉及到Action配置、验证码生成类的设计以及前端展示...
《Java Web开发技术大全:JSP+Servlet+Struts+Hibernate+Spring+Ajax》内容包括Web客户端技术、JSP/Servlet技术、Struts 2(*、类型转换、输入校验、上传和下载文件、Struts 2的各种标签、对 AJAX的支持等)、Spring...
《Java Web开发技术大全:JSP+Servlet+Struts+Hibernate+Spring+Ajax》内容包括Web客户端技术、JSP/Servlet技术、Struts 2(*、类型转换、输入校验、上传和下载文件、Struts 2的各种标签、对 AJAX的支持等)、Spring...
#### Struts2的理解 Struts2是一个基于MVC(Model-View-Controller)设计模式的Web层框架,它本质上是一个大型的Servlet。具体来说,该框架的核心组件是`ActionServlet`或者它的子类。开发者可以通过配置`web.xml`...
这些功能的实现通常依赖于SSH2组件如Spring、Hibernate和Struts2的协同工作。Spring负责依赖注入和事务管理,Hibernate处理对象关系映射(ORM),而Struts2则提供MVC架构,使业务逻辑与视图分离。通过这个项目,...
修复可能涉及了校验输入、处理异常、优化数据库查询、确保会话安全等方面。为了使系统能够正常运行,开发者可能已经更新了Action类的逻辑,修复了Struts 2配置文件中的错误,以及可能存在的Hibernate映射文件和...
7. **拦截器**:在Struts2框架中,拦截器是实现许多核心功能的关键,如输入校验、文件上传等。它们允许开发者将这些功能与业务逻辑分离,实现模块化和可插拔的设计。 8. **依赖注入(DI)**:DI是一种设计模式,...
2.28.2 Struts2校验框架应用 71 2.28.2.1 校验配置文件 71 2.28.2.2 角色Insert页面示例 71 2.28.2.3 用户Query页面示例 73 2.28.2.4 多行输入域校验 75 2.29 多语言管理 77 2.29.1 定义输入域的name属性和资源文件 ...
对输入进行校验,防止SQL注入等攻击。 5. 性能监控:集成日志监控和性能分析工具,以便及时发现并解决问题。 总结,无线点餐后后台管理系统通过Jsp+Servlet的组合,实现了餐厅的线上点餐与管理功能,为现代餐饮业...
使用预编译SQL语句、对输入进行校验和过滤,以及设置合适的Session过期时间,都是必要的安全措施。 7. **设计模式**:在开发过程中,我们可以运用设计模式来优化代码结构,如单例模式用于数据库连接池,工厂模式...
此模块可能包含数据校验机制,以防止非法输入,并支持批量导入导出成绩。 5. **通知公告模块**:系统能够发布最新的教学通知或学校公告,教师可以查阅并接收重要信息。这可能涉及到邮件服务,自动将公告发送至教师...
在SSM中,它可以对输入数据进行校验,确保数据的正确性和一致性,提供更安全的用户体验。 4. **jackson.zip**:Jackson是一个流行的JSON处理库,用于序列化和反序列化Java对象。在SSM框架中,Jackson可以方便地将...