输入校验是所有WEB应用必须处理的问题,输入校验分为客户端校验和服务器端校验。客户端校验主要通过JavaScript代码来完成,服务器端校验通常在应用中编程实现。
本文是基于服务器端的方法校验,利用validate框架来实现的。使用validate框架可以无需在ActionForm的子类中覆盖validate方法就可以很方便的验证客户端的提交数据。由于validate框架内置了很多预定义的验证机制,如验证Email是否合法等。所以在一般情况下,只需要配置XML文件就可以满足我们的验证需求。使用validate框架,比直接使用validate方法验证给我们带来的好处:
1.更容易维护。验证信息在一个配置文件中,所有更加利于今后维护这些验证信息。
2.标准化。如用户名和密码都要求由字母和数字组成。如果将这些验证都写在validate方法中,对这些验证进行标准化非常困难。而在validate框架中的验证机制都是预先定义的,一次,对validate框架来说是件非常容易的事。
3.避免重造轮子。减少代码的数量
下面介绍下详细的配置工作。
首先,安装validate的插件。在struts-config.xml中,添加如下的代码:
<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
<set-property property="pathnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/validator.xml" />
</plug-in>
其中的set-property元素设置了插件pathnames的属性值,包括两个xml文件。
(1)validate-rules.xml。系统会在lib下自动生成这个配置文件
(2)而validate.xml文件需要我们自己配置。
validate.xml的代码如下(此代码可以扩展,可以根据自己的需要修改):
<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE form-validation PUBLIC
"-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1.3//EN"
"http://jakarta.apache.org/commons/dtds/validator_1_1_3.dtd">
<form-validation>
<formset>
<form name="firstValidatorForm">
<field property="name" depends="required,maxlength,minlength,mask">
<msg name="required" key="error.name.blank"/>
<msg name="minlength" key="error.name.minLength"/>
<msg name="maxlength" key="error.name.maxLength"/>
<msg name="mask" key="error.name.alphanum"/>
<arg name="minlength" key="${var:minlength}" position="0" resource="false"/>
<arg name="maxlength" key="${var:maxlength}" position="0" resource="false"/>
<var>
<var-name>minlength</var-name>
<var-value>5</var-value>
</var>
<var>
<var-name>maxlength</var-name>
<var-value>10</var-value>
</var>
<var>
<var-name>mask</var-name>
<var-value>^[a-zA-Z0-9]*$</var-value>
</var>
</field>
<field property="age" depends="required,integer,intRange">
<msg name="required" key="error.age.blank"/>
<msg name="integer" key="error.age.integer"/>
<msg name="intRange" key="error.age.intRange"/>
<arg name="intRange" key="${var:min}" position="0" resource="false"/>
<arg name="intRange" key="${var:max}" position="1" resource="false"/>
<var>
<var-name>min</var-name>
<var-value>18</var-value>
</var>
<var>
<var-name>max</var-name>
<var-value>60</var-value>
</var>
</field>
<field property="email" depends="required,email">
<msg name="required" key="error.email.blank"/>
<msg name="email" key="error.email.invalid"/>
</field>
</form>
</formset>
</form-validation>
然后,我们建立一个例子进行测试。建立FirstValidatorForm.java它必须继承ValidateForm。
package actionform;
import org.apache.struts.validator.ValidatorForm;
public class FirstValidatorForm extends ValidatorForm {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
private String age;
private String email;
}
下一个是action的配置,随便写下为了测试。
package action;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
public class ValidatorAction extends Action {
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
response.setCharacterEncoding("GBK");
try
{
response.getWriter().println("验证成功!");
}
catch(Exception e)
{
}
return null;
}
}
struts-config.xml的具体代码:
<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd">
<struts-config>
<data-sources />
<form-beans>
<form-bean name="firstValidatorForm" type="actionform.FirstValidatorForm"/>
</form-beans>
<global-exceptions />
<global-forwards />
<action-mappings >
<action
attribute="firstValidatorForm"
name="firstValidatorForm"
path="/firstValidator"
scope="request"
validate="true"
type="action.ValidatorAction"
input="/firstValidator.jsp">
</action>
</action-mappings>
<message-resources parameter="com.yourcompany.struts.ApplicationResources" />
<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
<set-property property="pathnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/validator.xml" />
</plug-in>
</struts-config>
firstvalidate.jsp的代码:
<%@ page language="java" contentType="text/html; charset=GBK" pageEncoding="GBK"%>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK">
<title>Insert title here</title>
</head>
<body>
<html:form action="firstValidator">
姓名:
<html:text property="name"/> <font color="red"><html:errors property="name"/></font><p>
年龄:
<html:text property="age"/> <font color="red"><html:errors property="age"/></font><p>
EMail:
<html:text property="email"/> <font color="red"><html:errors property="email"/></font><p>
<html:submit value="提交"/>
</html:form>
</body>
</html>
下一个比较重要的文件时配置错误提示的国际化资源文件:
即struts自动生成的文件ApplicationResources中添加如下的代码:
# Resources for parameter 'com.yourcompany.struts.ApplicationResources'
# Project validate
error.name.blank=姓名不能为空
error.name.minLength=姓名长度不能小于5
error.name.maxLength=姓名长度不能大于5
error.name.alphanum=姓名必须是数字或字母
error.age.blank=年龄不能为空
error.age.integer=年龄为整数
error.age.intRange=年龄在{0}与{1}之间
error.email.blank=邮箱不能为空
error.email.invalid=邮箱不合法
注意1:我们都知道国际化文件支持ISO-88599-1,因此必须转换代码格式。否则页面出现乱码的。这里的代码我们可用jdk自带的native2ascii的编译工具将上面的代码转换为GBK的生成的,转换结果如下。(详细介绍在下一篇文章中说明。)
# Resources for parameter 'com.yourcompany.struts.ApplicationResources'
# Project validate
error.name.blank=\u59d3\u540d\u4e0d\u80fd\u4e3a\u7a7a
error.name.minLength=\u59d3\u540d\u957f\u5ea6\u4e0d\u80fd\u5c0f\u4e8e5
error.name.maxLength=\u59d3\u540d\u957f\u5ea6\u4e0d\u80fd\u5927\u4e8e5
error.name.alphanum=\u59d3\u540d\u5fc5\u987b\u662f\u6570\u5b57\u6216\u5b57\u6bcd
error.age.blank=\u5e74\u9f84\u4e0d\u80fd\u4e3a\u7a7a
error.age.integer=\u5e74\u9f84\u4e3a\u6574\u6570
error.age.intRange=\u5e74\u9f84\u5728{0}\u4e0e{1}\u4e4b\u95f4
error.email.blank=\u90ae\u7bb1\u4e0d\u80fd\u4e3a\u7a7a
error.email.invalid=\u90ae\u7bb1\u4e0d\u5408\u6cd5
注意2:我们还要添加一个拦截器,如果不添加的话,在输入的文件框中单击提交会也会出现乱码
分享到:
相关推荐
当用户提交表单时,Struts会调用ActionForm对象的validate()方法进行验证。这个方法通常是根据业务逻辑来定义的,如果验证失败,Struts会将错误消息添加到ActionErrors容器中,并跳转回表单页面显示这些错误信息。 ...
每个字段都可以有一个或多个验证方法,这些方法会在表单提交后由框架自动调用,以检查输入数据是否合法。 2. **验证规则** - **姓名**:通常我们可能需要验证姓名是否为空,或者长度是否在一定范围内。 - **密码*...
在Struts框架中,validate验证是处理用户输入的重要环节,它确保了数据的有效性和安全性。 在Struts的validate验证机制中,主要涉及到以下几个关键知识点: 1. **ActionForm**:在Struts中,ActionForm类用于封装...
通常,它会包括一个Action类,里面包含验证方法,以及对应的配置文件条目。测试时,模拟用户输入,检查验证是否按预期工作,错误是否正确记录和显示。 通过深入理解和熟练运用Struts2的验证机制,你可以构建出更...
本文将详细讨论如何在Struts中使用ActionForm的`validate`方法进行数据验证。 `validate`方法是在ActionForm中定义的一个可选方法,用于在提交表单数据后验证用户输入的有效性。这个方法通常会在调用Action的`...
6. **Struts Action Classes**:在执行业务逻辑之前,需要调用`validate()`方法对表单数据进行验证。 通过`struts_valida`和`struts_validate`的标签,我们可以推断这个示例可能涵盖了Struts验证框架的基本用法,...
这个validate验证框架中的actiionerror级别的错误的验证提示,并包含了如何在一个Action中处理多个业务逻辑,(struts1.x 中的DispatcheAction),例子比较简单,希望对大家学习struts有所帮助。
在Struts2中,我们可以利用validate方法进行高效且灵活的前端数据验证,确保用户输入的数据满足业务规则,从而提升应用的安全性和用户体验。 在Struts2中,表单验证主要依赖于两个核心组件:Action类和Validator...
总的来说,`struts1.2 validate`源代码实现涉及到了ActionForm的创建、验证方法的编写、Struts配置文件的更新以及错误处理机制。通过这种方式,可以有效地对用户输入进行控制,提高应用的安全性和用户体验。
2. **添加验证方法**:在ActionForm子类中,你需要为每个需要验证的字段添加一个对应的`validate`方法。这些方法通常以`validateField`的形式命名,例如`validateName`、`validateEmail`等。在这些方法内部,你可以...
STRUTS validate 配置是Struts框架中用于表单验证的重要组成部分,它允许开发者定义一系列规则以确保用户提交的数据符合预设的标准。以下是对STRUTS validate配置的详细解释: 1. **创建继承自ValidatorForm的...
### Struts2 自定义验证程序的实现方法详解 #### 一、Struts2 内建验证程序实现的分析 在探讨如何实现自定义验证程序之前,我们先来了解一下 Struts2 的内置验证机制。Struts2 提供了丰富的内置验证器(Validator...
`validate`方法是Struts2中用于数据验证的主要机制。 在Struts2中,验证数据的流程通常是这样的: 1. **ActionSupport与Validateable接口**:默认情况下,开发者会继承`ActionSupport`类来创建Action类,这个类...
在本文中,我们将深入探讨Struts的验证框架Validate的使用方法,以及它在实际开发中的应用。 1. **验证框架概述** Struts的验证框架是Struts 1.x中的核心功能之一,它允许开发者定义一组验证规则,并在用户提交...
1. **重写validate()方法**:这是最基础的方式,所有Action类都需要继承ActionSupport类,然后在validate()方法中编写自定义的验证逻辑,该方法会针对所有处理逻辑进行验证。 2. **重写validateXxx()方法**:为了...
开发者可以通过在ActionForm类中添加一个名为`validate`的方法来实现自定义的验证规则。例如: ```java public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { ActionErrors errors...
3. 调用`validate()`方法执行验证逻辑,如果存在验证规则,`validate()`方法会自动调用。 4. 如果验证失败,错误信息会被添加到ActionErrors容器。 5. Action继续执行,将ActionErrors容器传递给ActionForward。 6. ...
- **添加验证逻辑**:在`RegisterForm`中覆盖`validate()`方法,对每个字段进行验证。如果验证失败,使用`addError()`方法将错误信息添加到`ActionErrors`实例中。 - **传递错误信息**:在`execute()`方法中,如果...
本文将详细讲解Struts中的表单验证机制,包括ActionForm Bean的使用、validate()方法和reset()方法,以及如何处理验证错误。 首先,ActionForm Bean是Struts框架中用于存储和管理用户输入数据的Java对象。它需要...