已经转移到 好·色之徒--我的博客、我的生活
(说明)这里采用了最新版本
struts-1.2.7
,是在
struts-blank
的基础上演示的,为了以后的学习和参考用。
一、
在对应的
Form Baens
中重载
validate
方法
在
struts-config.xml
文件中,
action
节点下有“
validate
”这样一个属性。在
struts
框架中,默认属性是
validate=”true”
。所以如果想通过
Form Baens
的重载
validate
方法来验证数据的话,可以不用理会这一点。题外话:如果你在
struts-config.xml
文件中,设置
validate="false"
的话,
validate
方法将不起作用。这一点同样对
Validate
框架来验证数据起作用。
二、
通过
Validate
框架来验证数据
1
、
首先在
struts-config.xml
文件中,追加如下代码:
<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
<set-property property="pathnames"
value="/WEB-INF/validator-rules.xml,/WEB-INF/validations.xml"/>
<set-property property="stopOnFirstError" value="false"/>
</plug-in>
2
、然后编写自己的
Form Baens
,有两种方式可供选择:
①
写的
formBaen
需要继承
ValidatorForm
,而不是第一种方法中的
ActionForm
public class UserForm extends ValidatorForm {
private String userId = "";
private String password = "";
public void setUserId(String userId) {
this.userId = userId;
}
public String getUserId() {
return userId;
}
。。。。。。
然后配置
struts-config
文件
<form-bean name="userForm"
type="com.wxhx.presentation.UserForm"/>
②
配置
struts-config
文件
<form-beans>
<form-bean name=" userForm"
type="org.apache.struts.validator.DynaValidatorForm">
<form-property name=" userId" type="java.lang.String"/>
<form-property name="password" type="java.lang.String"/>
</form-bean>
</form-beans>
3
、配置
validation.xml
文件
<formset>
<form name="userForm"> ----
这里的
userForm
是
Form Beans
的名字
<field
property="userId"
depends="required">
<arg key="userForm.userId"/>
</field>
<field
property="password"
depends="required,mask">
<arg key="userForm.password"/>
<var>
<var-name>mask</var-name>
<var-value>^[0-9a-zA-Z]*$</var-value>
</var>
</field>
</form>
</formset>
其中
key="userForm.userId"
和
key="userForm.password"
需要在资源文件中配置
这里需要说明一点,例如:
<arg key="userForm.password" resource="false"/>
如果多了
resource="false"
这句话,那么它不会再从资源文件中去取,而是直接用
key
值来表示。
以上是通过
validatorForm- or DynaValidatorForm
来实现
Validate
验证的
(附)
现在有这样一个问题,
Form Beans
可以被多个
Action
应用,而每个
Action
可能需要的验证字段都不一样。而在
validation.xml
中配置的验证方式(如
<form name="userForm">
)是对这个
Form Beans
进行的。这样的话,如何来验证呢?
你的
Form Beans
可以继承
ValidatorActionForm
(当然可以直接配置
DynaValidatorActionForm
)。如下所示:
public class UserForm extends ValidatorActionForm {
...
}
或是
<form-bean name=" userForm "
type="org.apache.struts.validator.DynaValidatorActionForm">
...
</form-bean>
struts-config
文件配置如下:
<action-mappings>
<action path="/technology/createUser"
type="com.wxhx.minihr.CreateUserAction"
name="userForm"/>
<action path="/technology/editUser"
type="com.wxhx.minihr.EditUserAction"
name="userForm"/>
</action-mappings>
validation.xml
文件配置如下:
<formset>
<form name="/technology/ createUser ">
----
这里的采用的是
action
的
path
路径
<field property="city"
depends="required">
<arg0 key="prompt.city"/>
</field>
</form>
<form name="/technology/editUser ">
<field property="state"
depends="required">
<arg0 key="prompt.state"/>
</field>
</form>
</formset>
关于
validator-rules.xml
,定义了常用的一些规则,当然也可以自己追加新的规则。
这里经常会看到
msg="errors.required"
字样,也是通过资源文件中配置的,默认的资源如下:
# -- validator --
errors.invalid={0} is invalid.
errors.maxlength={0} can not be greater than {1} characters.
errors.minlength={0} can not be less than {1} characters.
errors.range={0} is not in the range {1} through {2}.
errors.required={0} is required.
errors.byte={0} must be an byte.
errors.date={0} is not a date.
errors.double={0} must be an double.
errors.float={0} must be an float.
errors.integer={0} must be an integer.
errors.long={0} must be an long.
errors.short={0} must be an short.
errors.creditcard={0} is not a valid credit card number.
errors.email={0} is an invalid e-mail address.
这在
struts-blank
的例子中会有,在开发项目的时候,注意这些默认资源
关于自己定义规则,以后再作研究
三、
结合上面的两种验证
如果即在
Form Beans
中重载了
validate
方法,又启用了
Validate
框架,那会是什么效果呢?
由于要启用
Validate
框架,
Form Beans
需要继承
ValidatorForm
,查看
ValidatorForm
的源代码,发现
validate
方法已经作了处理(真是为
Validate
框架所服务的)。
那么在
Form Beans
中重载了
validate
方法的话,就会覆盖原有
ValidatorForm
中对应的功能,所以如果想一起用的话,需要在
Form Beans
的
validate
方法中调用
errors = super.validate(mapping, request);
这句代码是启用
Validate
框架所要做的工作,然后可以判断
errors
再作下一步的处理。
当然也可以先做
Form Beans
中的
validate
方法,然后启用
Validate
框架,要看具体情况而定。
四、
启用客户端验证
也是结合
validation.xml
来验证的,我把
validation.xml
相关的内容在复制下来,便于看清楚:
<formset>
<form name="userForm"> ----
这里的
userForm
是
Form Beans
的名字
<field
property="userId"
depends="required">
<arg key="userForm.userId"/>
</field>
<field
property="password"
depends="required,mask">
<arg key="userForm.password"/>
<var>
<var-name>mask</var-name>
<var-value>^[0-9a-zA-Z]*$</var-value>
</var>
</field>
</form>
</formset>
①
在需要
客户端验证的
jsp
中加上这么一句
<html:javascript formName="
userForm
"/>
其中
formName
就是
validation.xml
中
<form name="userForm">
所对应的内容
②在
<html:form
中追加一个属性
onsubmit="return validateUserForm(this);"
它的语法为:
return validate + struts-config.xml
中定义的
form-bean
名称
+ (this);
③追加
<scriptlanguage="Javascript1.1" src="staticJavascript.jsp"></script>
staticJavascript.jsp
的内容为:
<%@ page language="java" %>
<%-- set document type to Javascript(addresses a bug in Netscape according
to a web resource --%>
<%@ page contentType="application/x-javascript" %>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<html:javascript dynamicJavascript="false" staticJavascript="true"/>
这只是一种方式,还有其他简洁的(具体为啥这样,不是很明白,希望得到高人指点)
比如:追加
onsubmit="return validateUserForm(this);"
<html:javascript formName="userForm" staticJavascript="true"/>