qiyadeng

          專注于Java示例及教程
          posts - 84, comments - 152, trackbacks - 0, articles - 34

          Struts之自定義Validator

          Posted on 2005-10-31 18:00 qiyadeng 閱讀(1191) 評論(0)  編輯  收藏 所屬分類: J2EE
          在使用Struts的時候,驗證是使用Validator來做,但是有時候需要有自己的驗證規則,幸運的是我們可以方便地進行擴展。
          比如我們想定義一個規則來判定兩次輸入的密碼是相等的。我們需要這樣做,首先我們需要一個類,象這樣子 :

          package com.motel168.util;

          import java.text.SimpleDateFormat;
          import java.util.Date;

          import javax.servlet.http.HttpServletRequest;

          import org.apache.commons.validator.Field;
          import org.apache.commons.validator.GenericValidator;
          import org.apache.commons.validator.ValidatorAction;
          import org.apache.commons.validator.ValidatorUtil;
          import org.apache.struts.action.ActionErrors;
          import org.apache.struts.validator.Resources;

          public class MyValidator {
          ??? public static boolean validateTwoFields(Object bean,ValidatorAction va,Field field,ActionErrors errors,HttpServletRequest request){
          ??? ???
          ??? ??? String value = ValidatorUtil.getValueAsString(bean,field.getProperty());
          ??? ??? String sProperty2 = field.getVarValue("secondProperty");
          ??? ??? String value2 = ValidatorUtil.getValueAsString(bean,sProperty2);
          ??? ??? if(!GenericValidator.isBlankOrNull(value)){
          ??? ??? ??? try{
          ??? ??? ??? ??? if(!value.equals(value2)){
          ??? ??? ??? ??? ??? errors.add(field.getKey(),Resources.getActionError(request,va,field));
          ??? ??? ??? ??? ??? return false;
          ??? ??? ??? ??? }
          ??? ??? ??? }catch(Exception e){
          ??? ??? ??? ??? errors.add(field.getKey(),Resources.getActionError(request,va,field));
          ??? ??? ??? ??? return false;
          ??? ??? ??? }
          ??? ??? }
          ??? ??? return true;
          ??? }
          ???
          }

          上面這個類就是用來判斷兩個域是否相等,很簡單,但是注意方法名一定要是validateXXX。

          接下來需要擴展validator-rules.xml,在之前加入這么一段:
          ??? ? 
          ??? ? ??? ???
          ???
          ?methodParams="java.lang.Object,org.apache.commons.validator.ValidatorAction,org.apache.commons.validator.Field,org.apache.struts.action.ActionErrors,javax.servlet.http.HttpServletRequest"
          ??? ? ??? ??? ??? ?depends="required" msg="errors.twofield">
          ??? ?
          ??? ? ??? ??? function validateTwoFields(form){
          ??? ? ??? ??? var bValid = true;
          ??? ? ??? ??? var focusField = null;
          ??? ? ??? ??? var i = 0;
          ??? ? ??? ??? var fields = new Array();
          ??? ? ??? ??? oTwoFields = new twofields();
          ??? ? ??? ??? for(x in oTwoFields){
          ??? ? ??? ??? ??? var field = form[oTwoFields[x][0]];
          ??? ? ??? ??? ??? var secondField = form[oTwoFields[x][2]("secondProperty")];
          ??? ? ??? ??? ??? if(field.type=="text"||field.type=="textarea"||field.type=="select-one"||field.type=="radio"||field.type=="password"){
          ??? ? ??? ??? ??? ??? var value;
          ??? ? ??? ??? ??? ??? var secondValue;
          ??? ? ??? ??? ??? ??? if(field.type=="select-one"){
          ??? ? ??? ??? ??? ??? ??? var si = field.selectedIndex;
          ??? ? ??? ??? ??? ??? ??? value = field.options[si].value;
          ??? ? ??? ??? ??? ??? ??? secondValue = secondField.options[si].value;
          ??? ? ??? ??? ??? ??? }else{
          ??? ? ??? ??? ??? ??? ??? value=field.value;
          ??? ? ??? ??? ??? ??? ??? secondValue = secondField.value;
          ??? ? ??? ??? ??? ??? }
          ??? ? ??? ??? ??? ??? if(value!=secondValue){
          ??? ??? ? ??? ??? ??? ??? if(i==0){
          ??? ??? ? ??? ??? ??? ??? ??? focusField = field;
          ??? ? ??? ??? ??? ??? }
          ??? ? ??? ??? ??? ??? fields[i++]=oTwoFields[x][1];
          ??? ? ??? ??? ??? ??? bValid = flase;
          ??? ? ??? ??? ??? }
          ??? ? ??? ??? }
          ??? ? ??? }
          ??? ? ??? if(fiels.length > 0){
          ??? ? ??? ??? focusFiled.focus();
          ??? ? ??? ??? alert(fields.join('\n'));
          ??? ? ??? ??? }
          ??? ? ??? return bValid;
          ??? ?
          ??? ? ]]>
          ??? ?

          ??? ?
          ???
          然后使用的時候就和其他沒什么兩樣的了:
          ??? ??? 
          ??? ??? ???
          ??? ??? ??? ???
          ??? ??? ??? ???
          ??? ??? ??? ???
          ??? ??? ??? ???
          ??? ??? ??? ???
          ??? ??? ??? ??? ??? secondProperty
          ??? ??? ??? ??? ??? newPassword2
          ??? ??? ??? ???

          ??? ??? ???

          ??? ??? ???
          ??? ??? ??? ???
          ??? ??? ??? ???
          ??? ??? ???

          ??? ???


          注意這個地方
          ??? ??? ??? ??? 
          ??? ??? ??? ??? ??? secondProperty
          ??? ??? ??? ??? ??? newPassword2
          ??? ??? ??? ???

          就是我們在java類中讀取的變量,它代表的是另外的一個域。
          在JSP中的使用就不再說明了,大功告成:)。


          主站蜘蛛池模板: 永顺县| 凭祥市| 石阡县| 通海县| 岳池县| 南阳市| 自贡市| 汝南县| 裕民县| 丹凤县| 萨迦县| 汤阴县| 绥芬河市| 浙江省| 秦皇岛市| 阳城县| 增城市| 六安市| 香格里拉县| 沿河| 临澧县| 辽阳县| 龙山县| 台南市| 分宜县| 商都县| 上思县| 景泰县| 霍城县| 扎鲁特旗| 龙游县| 琼海市| 高阳县| 辽阳县| 蛟河市| 海淀区| 安新县| 申扎县| 金乡县| 吉林省| 天津市|