qiyadeng

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

          Struts之自定義Validator

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

          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;
          ??? }
          ???
          }

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

          接下來需要擴(kuò)展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;
          ??? ?
          ??? ? ]]>
          ??? ?

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

          ??? ??? ???

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

          ??? ???


          注意這個(gè)地方
          ??? ??? ??? ??? 
          ??? ??? ??? ??? ??? secondProperty
          ??? ??? ??? ??? ??? newPassword2
          ??? ??? ??? ???

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


          主站蜘蛛池模板: 塔河县| 盖州市| 延川县| 前郭尔| 浮山县| 南岸区| 嵩明县| 宁强县| 黑水县| 邢台县| 阿合奇县| 搜索| 合水县| 黔西县| 宁远县| 兰考县| 大同市| 萨嘎县| 西和县| 鄱阳县| 南丰县| 太谷县| 尼木县| 抚宁县| 改则县| 宁陕县| 万荣县| 乌拉特中旗| 察隅县| 根河市| 绥芬河市| 吉安县| 凤庆县| 日喀则市| 凤山市| 抚宁县| 安龙县| 阳新县| 陆良县| 蚌埠市| 崇阳县|