<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    qiyadeng

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

    Struts之自定義Validator

    Posted on 2005-10-31 18:00 qiyadeng 閱讀(1188) 評論(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中的使用就不再說明了,大功告成:)。


    主站蜘蛛池模板: 国产亚洲精品看片在线观看 | 美女被爆羞羞网站在免费观看| 黄色免费网站网址| 亚洲日本乱码一区二区在线二产线 | 黄瓜视频影院在线观看免费| 久久久久亚洲av无码尤物| 免费看成人AA片无码视频吃奶| 亚洲人精品午夜射精日韩| 精选影视免费在线 | 国产亚洲人成A在线V网站| a国产成人免费视频| 亚洲AV无码专区在线播放中文| 在线观看黄片免费入口不卡| 亚洲高清国产AV拍精品青青草原| 久久青青草原国产精品免费| 亚洲福利视频一区| 青青草免费在线视频| 亚洲国产成人无码AV在线| www亚洲精品少妇裸乳一区二区| 一级成人毛片免费观看| 国产亚洲精久久久久久无码| 蜜桃视频在线观看免费视频网站WWW| 亚洲激情视频在线观看| 五月亭亭免费高清在线| 亚洲午夜精品久久久久久app| 少妇亚洲免费精品| 国产免费无码一区二区| 亚洲精品国产第1页| 国产又长又粗又爽免费视频| 黄色网址免费在线观看| 亚洲男人天堂影院| 免费h黄肉动漫在线观看| 免费看无码特级毛片| 亚洲日本VA午夜在线电影| 亚洲天堂中文字幕在线| 91精品免费高清在线| 亚洲AV无码AV男人的天堂不卡| 在线亚洲97se亚洲综合在线| 成人免费视频77777| 一区二区在线视频免费观看| 亚洲毛片无码专区亚洲乱|