1、ActionForm的代碼驗證。
2、Action的代碼驗證。
3、結合commons-validator.jar的驗證框架。
1。ActinForm的代碼驗證。
重寫ActionForm中的validate方法,在該方法中定義驗證的規則,如果出錯可以用ActionError或者ActionMessages封裝錯誤進行出錯處理。
代碼示例:
public ActionErrors validate(ActionMapping mapping,HttpServletRequest request)
{
ActionErrors errors = new ActionErrors();
if (ddd == null || ddd.equals(""))
{
errors.add("username", new ActionError("error.username","用戶名"));
//error.username對于資源文件的key.用戶名是對應資源文件的第一個參數
}
if (password == null || password.equals(""))
{
errors.add("password", new ActionError("error.password","密碼"));
}
if (vercode == null || vercode.equals(""))
{
errors.add("vercode", new ActionError("error.vercode","驗證碼"));
}
return errors;
}
2。Action的代碼驗證
實際上就是在Action的Excute方法的前面加上數據驗證的部分代碼。
代碼示例:
public ActionForward execute(ActionMapping mapping,ActionForm form,
HttpServletRequest request, HttpServletResponse response)throws Exception
{
LoginForm loginForm = (LoginForm)form;
String username = loginForm.getUsername();
if (username == null || username.equals("") )
{
request.setAttribute("errors","nameNotNull");
return mapping.findForward("input");
}
else
{
return mapping.findForward("success");
}
}
注:該方法的缺點在于在excute方法中添加驗證代碼使得代碼比較混亂;對于靜態的驗證應該盡量在客戶端完成,而不應該提交到服務器端,這樣加大的系統的負荷和響應速度。
3。commons-validator.jar的驗證框架
通用操作:增加校驗資源;利用validatorPlugIn加載校驗資源;ActionForm使用ValiadateForm的子類。
1) 繼承ValidateForm的驗證
(1) Struts 的ActionForm必須是ValidatorForm的子類。
(2) 編寫表單域時必須滿足校驗規則。校驗規則都由規則文件控制,規則文件有以
下兩個。
* validator-rules.xml 文件
* validation.xml 文件
第一個文件可在Struts 的解壓縮后的文件夾的lib 下找到,將該文件復制到WEB-INF ;
而validation.xml 文件則是屬于該項目的校驗文件,負責定義每個表單域必須滿足的規則,以及規則的詳細說明。
validator.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>
<!-- 定義需要校驗的表單,此處的name必須與struts-config.xrnl中定義
的AcitonForm的名字一致-->
<form name="loginForm">
<!-- 每個field元素定義一個表單域,必須滿足怎樣的規則此處定義必須滿足兩個規則:必填,匹配正則表達式-->
<field property="username" depends="required,mask">
<!--定義出錯字符串的第一個參數的值…-->
<arg key="loginForm.username" position="0"/>
<!--定義正則表達式-->
<var>
<var-name>mask</var-name>
<var-value>^[a-zA-Z]+$</var-value>
</var>
</field>
<!-- 定義pass域,需要滿足必填規則-->
<field property="pass" depends="required">
<arg key="loginForm.pass" position="0"/>
</field>
<!--定義rpass域,需要滿足必填規則 -->
<field property="rpass" depends="required,validwhen">
<arg key="loginForm.rpass" position="0"/>
<arg key="loginForm.pass" position="1"/>
<msg name="validwhen" key="loginForm.valid"/>
<!--定義必須滿足的有效條件-->
<var>
<var-name>test</var-name>
<!-- 設定有效條件,此項為空,或者此項與pass域相等-->
<var-value>((*this*==null)or(*this*==pass))</var-value>
</var>
</field>
<field property="mail" depends="required,email">
<arg key="loginForm.email" position="0"/>
</field>
</form>
</formset>
</form-validation>
(3)指定如果不滿足校驗規則時,系統將返回到哪個頁面,可通過struts-config.xml
文件指定即可。在struts-config.xml 文件中配置action 時, action 有個input 屬性,該屬
性用于指定不滿足規則時返回的頁面。另外,還應為 action 元素增加 validate= "true"
屬性。