ITEEDU

Struts Gossip: 伺服端验证器

如果要验证使用者的输入,光使用客户端验证是不保险的,客户端可能跳过输入页面,直接对服务器发送请求不正确的请 求,如果伺服端没有验证请求,就会导致错误。

要使用Validator伺服端验证,只要继承org.apache.struts.validator.ValidatorForm类别来撰写 ActionForm 就可以了,ValidatorForm是ActionForm的子类别,它重新定义了validate()方法,使用ValidatorForm定义了类 别之后,在validation.xml中的设定与 客户端验证器 相同。

RequestProcessor 会呼叫validate()方法,如果验证有误,则会收集相关的错误讯息并储存在ActionErrors中传回,您要作的是指定struts- config.xml中ActionMapping的type属性,提供一个讯息页面,在当中使用<html:messages>卷标显示错 误讯息,例如:
struts-config.xml
... 
<action
path="/login"
type="onlyfun.caterpillar.LoginAction"
name="userForm"
validate="true"
input="/WEB-INF/pages/form.jsp">
<forward
name="greeting"
path="/WEB-INF/pages/greeting.jsp"/>
</action>
...
form.jsp
<%@ taglib uri="/tags/struts-bean" prefix="bean" %> 
<%@ taglib uri="/tags/struts-html" prefix="html" %>
<%@page contentType="text/html; charset=Big5"%>
<html:html>
<head>
<title>Login</title>
<html:base/>
</head>
<body bgcolor="white">

<html:messages id="error">
<bean:write name="error"/>
</html:messages>

<html:form action="/login" focus="name">
名称:<html:text property="name" size="20"/><br>
邮件:<html:text property="email" size="20"/><br>
<html:submit/> <html:reset/>
</html:form>

</body>
</html:html>
Validator也提供了DynaActionForm的子类别DynaValidatorForm,您只要在struct-config.xml中设 定好相关的设定,就可以自动生成ActionForm对象,并具有验证功能,例如:
struts-config.xml
... 
<form-beans>
<form-bean
name="userForm"
type="org.apache.struts.validator.DynaValidatorForm">
<form-property
name="name"
type="java.lang.String"
initial="nobody"/>
<form-property
name="email"
type="java.lang.String"
initial="nobody@mail.com"/>
</form-bean>
</form-beans>
...