Struts Validator实例介绍
Struts Validator实例介绍
1 hello world
struts-config.xml
<!DOCTYPEstruts-configPUBLIC"-//ApacheSoftwareFoundation//DTDStrutsConfiguration1.2//EN""http://struts.apache.org/dtds/struts-config_1_2.dtd">
<struts-config>
<data-sources/>
<form-beans>
<form-beanname="loginForm"type="com.ergal.struts.form.LoginForm"/>
</form-beans>
<global-exceptions/>
<global-forwards/>
<action-mappings>
<actionattribute="loginForm"
path="/login"
input="/login.jsp"
name="loginForm"
scope="request"
validate="true"
type="com.ergal.struts.action.LoginAction">
<forward
name="success"
path="/haha.jsp"/>
</action>
</action-mappings>
<message-resourcesparameter="com.ergal.struts.ApplicationResources"/>
<plug-inclassName="org.apache.struts.validator.ValidatorPlugIn">
<set-property
property="pathnames"
value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"/>
</plug-in>
</struts-config>
login.jsp
<%@tagliburi="/tags/struts-html"prefix="html"%>
<%@tagliburi="/tags/struts-bean"prefix="bean"%>
<html>
<head>
<title>MyJSP'login.jsp'startingpage</title>
</head>
<body>
<html:errors/>
ThisismyJSPpage.<br>
<html:formaction="/login"method="post">
username:<html:textproperty="username"></html:text>
<html:submit>submit</html:submit>
</html:form>
</body>
</html>
LoginForm.java
packagecom.ergal.struts.form;
importjavax.servlet.http.HttpServletRequest;
importorg.apache.struts.action.ActionErrors;
importorg.apache.struts.action.ActionMapping;
importorg.apache.struts.validator.ValidatorForm;
publicclassLoginFormextendsValidatorForm
{
/*
*GeneratedMethods
*/
privateStringusername;
publicStringgetUsername()
{
returnusername;
}
publicvoidsetUsername(Stringusername)
{
this.username=username;
}
publicvoidreset(ActionMappingmapping,HttpServletRequestrequest)
{
}
}
LoginAction.java
......
validation.xml
<!DOCTYPEform-validationPUBLIC"-//ApacheSoftwareFoundation//DTDCommonsValidatorRulesConfiguration1.1.3//EN""validator_1_1_3.dtd">
<form-validation>
<formset>
<formname="loginForm">
<fieldproperty="username"depends="required">
<argkey="label.username"position="0"/>
</field>
</form>
</formset>
</form-validation>
validator-rules.xml
不变 用现成的
ApplicationResoures.properties
#ProjectP/validatortest
label.username=Yourname
errors.required={0}isrequired.
2 配置元素
因为后面还要学习自定义rules所以先不管validator-rules.xml
先看validattion.xml
global 和 constant 结合可以定义一些全局变量
如
<constant>
<constant-name>zip</constant-name>
<constant-value>^d{5}d*$</constant-value>
</constant>
</global>
然后在var里就可以直接这么引用了
<var-name>mask</var-name>
<var-value>${zip}</var-value>
</var>
formset
有属性language 和 country
元素constant 和 form
里面也可以用constant来像前面那样来声明变量 但是这个变量是局部变量
form
form的name属性 就是名字要和struts的form的bean的定义名字一样
有元素field
field
属性 depends 对应rules property 对应表单的某个属性的名字和ActionForm的变量对应 page对应跨页表单
有元素arg msg
arg
属性name 对应depends里的rules key 对应消息文本 bundle resource是否用原始的定义文本 默认true
position 对应资源文件里的序列{*}的值
msg
属性name 对应depends里的rules key 对应消息文本 bundle resource是否用原始的定义文本 默认true
var
比较简单就是var-name 和var-value 用来设定参数值或者规则的表达式
现在添加一个来测试
首先改成
<formname="loginForm">
<fieldproperty="username"
depends="required,integer,intRange">
<argkey="errors.test"/>
</field>
</form>
</formset>
什么都不写就写一个arg
在validation.xml里页就只写
errors.test=asdasd
这样输入空的时候显示asdasd is required.
输入不合理的数字就会什么都没有 因为违反了integer和Intrang的规则 但是在这两个规则里的msg的对应的 资源并没有定义 所以会这样
然后加上默认的
errors.integer=itmustbeinteger
这时再测试
输入空显示asdasd is required.
输入字母显示it must be integer
输入其他数字显示int must between {1}and {2}
原因是没有定义var
现在加上 然后改成
<formname="loginForm">
<fieldproperty="username"
depends="required,integer,intRange">
<argkey="errors.test"/>
<argname="required"key="label.username"position="0"/>
<argname="intRange"key="${var:min}"resource="false"position="1"/>
<argname="intRange"key="${var:max}"resource="false"position="2"/>
<var>
<var-name>min</var-name>
<var-value>10</var-value>
</var>
<var>
<var-name>max</var-name>
<var-value>20</var-value>
</var>
</field>
</form>
</formset>
对应的资源文件为
errors.required={0}isrequired.