刚开始用validator,需要注意较多的细节,再稍微明白些后,建议看看struts-example。
为了抛砖引玉,写个例子:
一。在struts-config.xml中加入<plug-in/>:
<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
<set-property property="pathnames"
value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml" />
</plug-in>
在插件的配置中是通过pathnames属性来指定Validator的配置文件的,对于多个配置文件需要用“,”分隔。
validator-rules.xml文件用来定义Validator的校验规则,validation.xml文件用来定义针对每个JavaBean进行哪种校验。
二。创建Action:
public class LoginAction extends Action {
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
LoginForm loginForm = (LoginForm) form;// TODO Auto-generated method stub
return mapping.findForward("success");
}
}
这个例子中其实Action什么都没做(只有句转发),为了体验validator纠错的现象。
三。创建ActionForm
import javax.servlet.http.HttpServletRequest;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.validator.ValidatorForm;
/**
* MyEclipse Struts
* Creation date: 05-02-2007
*
* XDoclet definition:
* @struts.form name="loginForm"
*/
public class LoginForm extends ValidatorForm {
private String name;
private String password;
public void reset(ActionMapping mapping, HttpServletRequest request) {
name = null;
password = null;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
不要重写validate方法。
四。配置struts-config.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!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="loginForm"
type="com.yourcompany.struts.form.LoginForm" />
</form-beans>
<global-exceptions />
<global-forwards />
<action-mappings>
<action attribute="loginForm"
input="/form/login.jsp"
name="loginForm"
path="/login"
scope="request"
type="com.yourcompany.struts.action.LoginAction"
validate="true" >
<forward name="success" path="/form/success.jsp"></forward>
</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/validation.xml" />
</plug-in>
</struts-config>
注意:
1。 一定要写validate="true",进行validator检测。
2。<action>元素中attribute属性用来指定ActionForm保存到指定上下文时所使用的属性名。下面部分会涉及到此属性。
五。配置validation.xml:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!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="loginForm">
<field property="name" depends="required">
<arg0 key="prompt.name"/>
</field>
<field property="password" depends="required">
<arg0 key="prompt.password"/>
</field>
</form>
</formset>
</form-validation>
注意:
1。<form name="loginForm">中name属性其实对应着struts-config.xml中<action>的attribute属性,说白了attribute="lf"的话,那么<form name="lf">。如果struts-config.xml中<action>没attribute属性的话则attribute的值默认为name的值,此处就是<form name="loginForm">。
2。property="name"这个 “name”是跟LoginForm中 name私有成员相一致的。
depends="required" 强制某个域不能为空。
<arg0 key="prompt.name"/>中prompt.name是在ApplicationResources.properties中定义的(下一步定义)。
3。property="password"同上。
六。填写ApplicationResources.properties资源文件:
# Resources for parameter 'com.yourcompany.struts.ApplicationResources'
# Project P/myValidator
errors.header=<span class="error-header1">Errors:</span><br><span class="error-header2">You must correct the following error(s) before processing.</span><ul>
errors.footer=</ul>
errors.prefix=<li><span class="error-text">
errors.suffix=</span></li>
prompt.name=name
prompt.password=Password
prompt.test=test
# Standard error messages for validator framework checks
errors.required={0} is required.
errors.minlength={0} cannot be less than {1} characters.
errors.maxlength={0} cannot be greater than {2} characters.
errors.invalid={0} is invalid.
errors.byte={0} must be an byte.
errors.short={0} must be an short.
errors.integer={0} must be an integer.
errors.long={0} must be an long.
errors.float={0} must be an float.
errors.double={0} must be an double.
errors.date={0} is not a date.
errors.range={0} is not in the range {1} through {2}.
errors.creditcard={0} is not a valid credit card number.
errors.email={0} is an invalid e-mail address.
七。编写JSP( login.jsp):
<%@ page language="java" pageEncoding="ISO-8859-1"%>
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %>
<%@ taglib uri="http://struts.apache.org/tags-tiles" prefix="tiles" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html:html lang="true">
<body>
<html:javascript dynamicJavascript="true"
formName="loginForm"
staticJavascript="false"/>
<script language="Javascript1.1" src="staticJavascript.jsp"></script>
<html:errors/>
<html:form action="/login" method="post" focus="name,password" οnsubmit="return validateMyFor(this);">
<table border="0">
<tr>
<td>Login:</td>
<td><html:text property="name" /></td>
</tr>
<tr>
<td>Password:</td>
<td><html:password property="password" /></td>
</tr>
<tr>
<td colspan="2" align="center"><html:submit /></td>
</tr>
</table>
</html:form>
</body>
</html:html>
注意:
1。formName="loginForm" 中loginForm其实是struts-config.xml中对应的Action中attribute的值,如果没有attribute属性,则要跟name属性的值一致。
2。 focus="name,password" 是loginForm中元素的名称。
若有问题请跟帖。