校验器:
struts-config.xml:
插件加入,要放在最后面
<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="true" />
</plug-in>
validator-rules.xml:
一般来说写规则
<validator name="required"
classname="org.apache.struts.validator.FieldChecks"
method="validateRequired"
methodParams="java.lang.Object,
org.apache.commons.validator.ValidatorAction,
org.apache.commons.validator.Field,
org.apache.struts.action.ActionMessages,
javax.servlet.http.HttpServletRequest"
msg="errors.required"/>
errors.required要在ApplicationResources.properties中定义
validation.xml:
一般来说写条件
<form name="loginForm">
<field property="username" depends="required,minlength">
<arg key="label.login.username" position="0"/>
<arg name="minlength" key="${var:minlength}" resource="false" position="1"/>
<var>
<var-name>minlength</var-name>
<var-value>5</var-value>
</var>
</field>
</form>
FormBean请继承:ValidatorForm
ApplicationResources_zh_CN.properties:
可以加参数{0},在validation.xml中绑定
errors.required={0}不能为空,必须输入
errors.minlength={0}的长度不能小于{1}
需要 JavaScript的时候:
form上要加上
οnsubmit="return validateLoginForm(this)"
jsp里加上这个会生成JavaScript代码
这个formName是在validation.xml中定义的。
<html:javascript formName="loginForm"/>
全部搞定
另:struts配置文件中<action>元素的name属性和validator.xml文件的<form>元素的name属性要完全相同。
在配置过程中遇到了另一个问题,如果在Action中将formbean处理之后以request.setAttribute("beanName",BeanName),在jsp页面中用request.getAttribute("beanName")获取到,在页面中使用;但是在经过验证时,sturts配置文件中input属性直接定向到jsp页面,也就是不经过action转发,这时应该是jsp捕获不了beanName了吧?即request.getAttribute("beanName") 对象为null,但是这时有了一个新发现:用request.getAttribute("BeanName")就能获取到(注意大小写),是不是struts的配置文件中将form-name属性当作一个全局变量了呢?
测试了一下,只要formbean数据有变化,用request.getAttribute("XXXXBean")都能获取到XXXXBean,新发现!;