[coolxing按: 转载请注明作者和出处, 如有谬误, 欢迎在评论中指正.]
准备工作
1. 登陆页面的表单:
<s:fielderror />
<s:form id="loginForm" name="loginForm" method="post" namespace="/validate" action="validateAction_login.action" theme="simple">
用户名: <s:textfield name="username" /><br>
密 码: <s:textfield name="password" /><br>
年 龄: <s:textfield name="age" /><br>
<s:submit value="login" /><br>
</s:form>
2. 定义校验规则:
用户名不能为null, 或者空字符串;
密码不能为null或者空字符串, 密码中只能包含[0-9a-zA-Z], 不能存在非法字符, 且长度在6-8位之间;
年龄必须为整型, 且不能为负数.
采用基本验证的方式校验表单
1. 创建ValidateAction类, 继承ActionSupport并实现Validateable接口.
public class ValidateAction extends ActionSupport implements Validateable {
private String username;
private String password;
private Integer age;
public String login() {
return "success";
}
@Override
public void validate() {
if (username == null || "".equals(username.trim())) {
this.addFieldError("username", "用户名不能为空");
}
if (password == null || "".equals(password.trim())) {
this.addFieldError("password", "密码不能为空");
} else if (!password.matches("[0-9a-zA-Z]{6, 8}")) {
this.addFieldError("password", "密码的长度应该在6-8位之间");
}
if (age < 0 ) {
this.addFieldError("age", "年龄不能为负数");
}
}
// 省略getter和setter方法
}
validate()方法在业务方法之前执行. 通过查看底层源代码可以获知, this.addFieldError(String fieldName, String errorMessage)方法最终将在ValidationAwareSupport类的fieldErrors成员中添加一条记录(fieldErrors是一个Map<String, List<String>>集合). validate()方法执行完成之后, 如果fieldErrors集合中不包含错误信息, 表示校验通过, 接下来将执行login方法. 否则表示校验没有通过, 不再执行login()方法.
默认情况下, validate()方法将对所有的业务方法进行验证, 如果只想验证login()方法, 将validate()改名为validateLogin()即可.
2. 配置ValidateAction:
<action name="validateAction_*" class="cn.xing.validate.ValidateAction" method="{1}">
<result name="success">/validate/success.jsp</result>
<result name="input">/validate/login.jsp</result>
</action>
表单校验的执行流程
1. 类型转换器对请求参数执行类型转换, 并把转换后的值赋给action中的属性.
2. 如果在执行类型转换的过程中出现异常, 系统会将异常信息保存到ActionContext, conversionError拦截器将异常信息封装到fieldErrors里, 然后执行第3步. 如果类型转换没有出现异常, 则直接进入第3步.
3. 系统通过反射技术调用action中的validateXxx()方法, Xxx为方法名.
4. 调用action中的validate()方法.
5. 经过上面4步, 如果系统中的fieldErrors存在错误信息(即存放错误信息的集合的size大于0), 系统自动将请求转发至名称为input的视图. 如果系统中的fieldErrors没有任何错误信息, 系统将执行action中的业务方法.
基于XML配置方式实现输入校验
1. 创建Action类, 继承ActionSupport或实现Validateable接口:
public class ValidateXmlAction extends ActionSupport implements Validateable {
private String username;
private String password;
private Integer age;
public String login() {
System.out.println("login");
return "success";
}
// 省略getter和setter方法
}
2. 配置ValidateXmlAction:
<action name="validateXmlAction_*" class="cn.xing.validate.ValidateXmlAction" method="{1}">
<result name="success">/validate/success.jsp</result>
<result name="input">/validate/loginxml.jsp</result>
</action>
3. 在ValidateXmlAction的同级目录中创建用于校验表单的xml文件, 文件名为ValidateXmlAction-validation.xml(用于校验表单的xml文件的文件名规定为ActionClassName-validation.xml):
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
"-//OpenSymphony Group//XWork Validator 1.0.3//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd">
<validators>
<!--
field:表示验证的字段名称, 对应的值是访问的action中的属性. 这里是ValidateXmlAction中的username属性
-->
<field name="username">
<!--
field-validator表示字段校验器, type属性指定使用的校验规则
-->
<field-validator type="requiredstring">
<!-- 调用RequiredStringValidator中setTrim(true) -->
<param name="trim">true</param>
<!-- 给出错误提示信息 -->
<message><![CDATA[用户名不能为空!!!]]></message>
</field-validator>
</field>
<field name="password">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message><![CDATA[密码不能为空!!!]]></message>
</field-validator>
<field-validator type="regex">
<param name="expression"><![CDATA[^[a-zA-Z0-9]+$]]></param>
<message><![CDATA[密码中不能包含非法字符]]></message>
</field-validator>
<field-validator type="regex">
<param name="expression"><![CDATA[^[a-zA-Z0-9]{6,8}$]]></param>
<message><![CDATA[密码的长度应该在6-8位之间]]></message>
</field-validator>
</field>
<field name="age">
<field-validator type="ageValidate">
<message><![CDATA[年龄不能为负数!!!]]></message>
</field-validator>
</field>
</validators>
4. 上述xml文件中使用名称为ageValidate的校验规则对age字段进行校验. ageValidate是一个自定义的校验规则.
自定义校验规则首先需要创建一个类, 继承FieldValidatorSupport类:
public class AgeValidate extends FieldValidatorSupport {
/**
* @param object: 是Action对象, 其中封装了待验证的字段. 此例中object为ValidateXmlAction对象
*/
public void validate(Object object) throws ValidationException {
// 获取需要验证的字段的名称
String fielsName = this.getFieldName();
// 获取该字段的值
Object value = this.getFieldValue(fielsName, object);
// 判断表单提交的该字段的值是否为整型
if (value instanceof Integer) {
Integer ivalue = (Integer) value;
if (ivalue < 0) {
// 增加错误信息到fieldError集合中
this.addFieldError(fielsName, object);
}
}
}
}
接下来需要注册上述自定义的校验规则. 在src下创建 validators.xml文件(文件名称固定):
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
"-//OpenSymphony Group//XWork Validator Config 1.0//EN"
"http://www.opensymphony.com/xwork/xwork-validator-config-1.0.dtd">
<validators>
<!-- 注册自定义的验证器 -->
<validator name="ageValidate" class="cn.xing.validate.AgeValidate"></validator>
</validators>
5. 默认情况下将对Action中的所有业务方法进行校验. 如果只想对Action中的某个业务方法进行校验, 可以将用于校验的xml文件命名为ActionClassName-ActionName_methodName-validation.xml. 本例中只对login()方法进行校验, 只需将ValidateXmlAction-validation.xml文件更名为ValidateXmlAction-validateXmlAction_login-validation.xml即可.
分享到:
相关推荐
在这个名为"struts2-login校验.rar"的压缩包中,我们很显然会看到一个关于Struts2登录验证的实现,涉及到admin和user两个不同角色的登录页面。 首先,我们需要了解Struts2的核心概念,如Action和Result。Action是...
Struts2是一个基于MVC(Model-View-Controller)设计模式的Java Web应用程序框架,它简化了开发过程,提供了强大的表单验证、国际化、动态方法调用等功能。 1. **MVC设计模式**:MVC模式是软件工程中常用的设计模式...
3. **拦截器(Interceptors)**:这是Struts 2的一大特色,它可以插入到Action调用的前后,实现如日志记录、权限验证、数据校验等通用功能。例如,`TilesPlugin`用于页面布局,`ValidationInterceptor`进行表单验证...
通过阅读这些文档,开发者能够掌握如何创建Action、配置Struts2、使用拦截器、处理表单提交、进行数据校验、实现动态方法调用等技术。此外,文档还会详细介绍如何利用Struts2的特性来优化性能,提高应用的安全性和可...
- **表单验证**:利用Struts 2的内置验证机制,对用户输入进行校验。 - **国际化与本地化**:如何让应用支持多语言,实现动态切换。 - **标签库的使用**:掌握Struts 2提供的各种标签,提高视图层的开发效率。 - **...
4. **强大的表单和验证**:Struts2提供了一套强大的表单处理机制,包括类型转换、数据校验和字段级错误处理。XML或者注解可以用来定义验证规则。 5. **模板技术**:Struts2支持多种视图模板技术,如FreeMarker、...
在Struts2中,校验器(Validator)是处理用户输入验证的核心组件,确保提交到服务器的数据符合预设的业务规则。这篇博客文章可能是关于如何使用Struts2的内置校验机制以及自定义校验规则的探讨。 Struts2的校验框架...
《Struts2环境下的Jcaptcha4Struts2验证码组件详解》 在Web开发中,验证码是一种常见的安全机制,用于防止自动化的恶意攻击,如机器人填写表单或进行非法操作。Struts2作为Java Web开发中广泛应用的MVC框架,与...
10. **数据校验**:Struts 2提供了强大的表单数据验证功能,可以通过XML或注解定义验证规则,可以进行客户端和服务器端的数据校验,确保输入数据的正确性。 综上所述,Struts 2.3.15作为一个成熟的Web开发框架,...
这个库支持处理HTTP请求中的多部分/表单数据,允许Struts2应用接收并处理上传的文件。 8. **struts2-struts-2.3.15.3-搭建MODE.zip** 这个文件看起来是一个示例或模式项目,包含了一个基本的Struts2应用实例,...
总结来说,Struts2的表单校验机制提供了多种灵活的方式,开发者可以根据实际需求选择适合的校验策略,确保用户输入的数据准确无误,从而提高应用的安全性和稳定性。无论是使用XML配置文件、注解还是自定义校验方法,...
此外,Struts2还提供了强大的验证功能,可以通过注解或XML配置对表单数据进行校验。 **5. 拦截器的应用** 拦截器是Struts2的一大特色,可以实现如日志、事务管理、权限控制等功能。例如,`ValidationInterceptor`...
在Struts2中,表单验证是非常重要的一个环节,它确保了用户输入的数据符合预设的规则,从而保证了应用程序的数据质量和安全性。本示例主要讲解的是使用XML文件进行表单验证的方法。 首先,让我们理解表单验证的基本...
3. 表单验证:学习如何在ActionForm中定义验证规则,以及在客户端和服务端进行数据校验。 4. 国际化和本地化:研究Struts如何支持多语言环境,如何配置资源文件以实现动态显示语言内容。 5. 模板和页面布局:通过...
5. **数据校验**:内置的Validator框架可进行表单数据的验证,确保输入的有效性,这对于CRM系统中的数据完整性至关重要。 6. **插件支持**:Struts2有丰富的插件生态系统,例如Struts2 DOJO Plugin用于集成DOJO ...
- **表单标签**:在Struts 2表单标签库中,表单标签为`<s:form>`。 3. **ActionSupport类**: - `ActionSupport`类实现了`Validateable`接口和`Action`接口等,提供了基本的验证和业务逻辑处理功能。 - **验证...
当用户提交表单时,Struts2会自动进行验证,如果失败则返回相应的错误消息。 对于更复杂的验证逻辑,可以创建一个单独的验证类,通过`validate()`方法实现。例如: ```java public class RegistrationValidation ...
在处理用户输入和业务逻辑交互时,Struts2提供了强大的类型转换和校验机制,以确保数据的有效性和安全性。以下是对给定内容的详细解释: **类型转换** 在Struts2中,当用户通过表单提交数据时,所有参数默认都以...
当用户提交表单数据时,Struts2会使用OGNL将这些数据绑定到值栈中的Action对象。然后,Action执行业务逻辑,处理完成后,结果再次通过OGNL解析并推入值栈,供视图层展示。这种设计使得开发者可以专注于业务逻辑,而...
- **强大的表单处理**:支持动态字段绑定,自动校验,简化了表单提交和验证的处理。 - **可扩展性**:通过插件系统,可以轻松集成其他技术,如数据库操作、模板引擎等。 在实际开发中,Struts 2可以与其他技术结合...