`
fslingmo
  • 浏览: 25722 次
  • 性别: Icon_minigender_2
  • 来自: 厦门
社区版块
存档分类
最新评论

Validator自动校验数据

阅读更多

除了Form Bean中的validate()方法,Struts还提供Validator插件进行数据校验,Validator插件能在Jsp页面里面生成JavaScript脚本,利用定制的JavaScript脚本在客户端浏览器进行数据校验。

 

1.支持自动校验 的ValidatorForm

 支持Validator校验的Form Bean必须继承Struts的ValidatorForm。本例使用Validator校验Form Bean的非空字符串、整型变量以及电子邮件。

 

 

代码1:ValidateTestForm.java

 

package com.strust1.test.actionFrom;

import org.apache.struts.validator.ValidatorForm;

public class ValidatorTestForm extends ValidatorForm {
	private int age;
	private String name;
	private String email;
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	

}

 

2.Validate规则配置

 

Validator插件使用配置式数据校验,所有的校验规则都配置在XML文件中。基本上所有的常用校验都能通过配置实现。

 

代码2:validation.xml

 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE form-validation PUBLIC
        "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.3.0//EN"
        "http://jakarta.apache.org/commons/dtds/validator_1_3_0.dtd">
<form-validation>
	<formset>
		<form name="validatorTestForm">
			<field property="name" depends="required"><!--名字非空-->
				<msg name="required" key="validatorTest.error.nameRequired"/>
			</field>
			<field property="age" depends="required, integer, intRange">
				<arg position="0" name="intRange" key="${var:min}" resource="false"/>
				<arg position="1" name="intRange" key="${var:max}" resource="false"/>
				<var>
					<var-name>min</var-name>
					<var-value>0</var-value>
				</var>
				<var>
					<var-name>max</var-name>
					<var-value>100</var-value>
				</var>
				<msg name="required" key="validatorTest.error.ageRequired"/>
				<msg name="integer" key="validatorTest.error.ageinteger"/>
				<msg name="intRange" key="validatorTest.error.ageintRange"/>
			</field>
			<field property="email" depends="required, email">
				<msg name="email" key="validatorTest.error.emailformat"/>
				<msg name="required" key="validatortest.error.emailrequired"/>
			</field>
		
		</form>
	</formset>
</form-validation>

 

被校验的Form表单名称为validateTestForm。配置校验了3个域:name、age、email。其中name的校验规则为requried(表示该输入是必需的)。age的校验规则为required、integer(表示该输入必须为整型)、range(表示该输入值在特定的区间内),email的校验规则为required、email(表示该输入必须符合电子邮件格式)

 

提示:Struts1.x提供配置式数据验证,并预先封装好了常用的数据校验器,例如字符串、数字、电子邮件等,也可以自定义数据校验器。

 

3、错误信息配置

 

如果检验失败,会显示<msg>配置的错误信息。错误信息配置在Struts的资源文件中,key为资源的索引。资源文件内容如下:

 

validatorTest.error.nameRequired=\u540D\u5B57\u5FC5\u586B
validatortest.error.emailrequired=email\u5FC5\u987B\u586B\u5199
validatorTest.error.ageRequired=\u5E74\u9F84\u5FC5\u586B
validatorTest.error.ageinteger=\u5E74\u9F84\u5FC5\u987B\u662F\u6574\u6570
validatorTest.error.ageintRange=\u5E74\u9F84\u5FC5\u987B\u57280\u5230100\u4E4B\u95F4
validatorTest.error.emailformat=email\u683C\u5F0F\u4E0D\u6B63\u786E

 这是编码过的。

 

 

4.配置到Struts-config.xml中

 

校验规则配置完成后,还需要连同校验规则库(也就是validator-rules.xml文件,定义了常用的校验实现代码,位于/WEB-INF下)配置到struts-config.xml中配置为plugin的形式,代码如下

 

 

代码3:struts-config.xml

 

 

<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE struts-config PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"
        "http://struts.apache.org/dtds/struts-config_1_3.dtd">
<struts-config>
	<form-beans>
		<form-bean name="validatorTestForm"
			type="com.strust1.test.actionFrom.ValidatorTestForm">
		</form-bean>
	</form-beans>
	<action-mappings>
		<action path="/validatorTest"
			type="com.strust1.test.action.ValidatorAction"
		    name="validatorTestForm"
			>
		</action>
	</action-mappings>
  <message-resources parameter="com.strust1.test.ApplicationResources"></message-resources>
 <plug-in className="org.apache.struts.validator.ValidatorPlugIn">
 	<set-property property="pathnames" value="/WEB-INF/validator-rules.xml, /WEB-INF/validation.xml"/>
 	<set-property property="stopOnFirstError" value="false"/>
 </plug-in>
</struts-config>

 

第一个参数pathnames为校验规则库文件、校验规则配置文件的路劲。第二个参数为如果前面校验失败是否停止后面的校验。

 

 

5.配置客户端JavaScript校验

 

配置完后,就可以在jsp中引用校验了,jsp中必须使用<html:javaScript/>标签。Struts会在该标签处生成JavaScript校验代码,例如:

 

 

代码5:validaeTest.jsp

 

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'validateTest.jsp' starting page</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->

  </head>
  
  <body>
     <html:form action="/validatorTest" onsubmit="return validateValidatorTestForm(this)">
     	姓名:<html:text property="name"></html:text><html:errors property="name"/><br/>
     	年龄:<html:text property="age"></html:text><html:errors property="age"/>
     	电子邮件:<html:text property="email"></html:text><html:errors property="email"/>
     	<html:submit value="提交"></html:submit>
     	<html:javascript formName="validatorTestForm"/>
     </html:form>
  </body>
</html>
 

 

<html:javaScript>标签的formName与validation.xml中配置的form的name属性遥相呼应。Jsp表单也要使用onsubmit事件。注意代码consubmit="return validateValidatorTestForm(this);"中函数的名称也要用到了form name。

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics