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

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

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

    午夜拍鍵驚奇
    子夜 編程 代碼與我同在
    posts - 48,comments - 118,trackbacks - 79

    三、自定義校驗邏輯

    畢竟Struts提供的校驗邏輯有限,不可能滿足所有的開發需要,因此有時必須對其進行擴展。這里舉一個實際項目中的例子:校驗碼檢查。現在很多網站為了防止惡意的頁面刷新攻擊,都使用了圖片形式的校驗碼,如:

    表單提交后需要檢查校驗碼(存在request或session里)和用戶輸入是否一致,代碼如下:

     1public class MyValidator{
     2  private static Logger logger = Logger.getLogger(Constants.CON_LOGGER_NAME);
     3
     4  public static boolean validateCodeInput(Object obj,ValidatorAction action,Field field,
     5      ActionMessages errors,HttpServletRequest req){
     6    String code = (String)req.getSession().getAttribute(Constants.SESSION_CHECKSUM_CODE);
     7    String input = ValidatorUtils.getValueAsString(obj,field.getProperty());
     8
     9    logger.debug("Code: " + code + ", input: " + input);
    10    if(code.equalsIgnoreCase(input))
    11      return true;
    12    else{
    13      errors.add(field.getKey(),Resources.getActionMessage(req,action,field));
    14      return false;
    15    }

    16  }

    17}

    注釋:
    1、第1行:MyValidator沒有任何父類,運行時Validator通過reflection生成對象
    2、第4行:校驗方法可隨意命名,通過reflection調用,但參數必須按照規范
    3、第6行:從session中取出圖片中的字符串
    4、第7行:得到用戶輸入的值,Struts在這里用Field類對表單字段進行了封裝,而Field具體封裝的字段在validation.xml中定義,見上篇

    validator-rules.xml中的定義:

     1<validator name="codeinput"
     2            classname="consultII.web.utils.MyValidator"
     3               method="validateCodeInput"
     4         methodParams="java.lang.Object,
     5                       org.apache.commons.validator.ValidatorAction,
     6                       org.apache.commons.validator.Field,
     7                       org.apache.struts.action.ActionMessages,
     8                       javax.servlet.http.HttpServletRequest"
     9                  msg="errors.code"/>
    10

    validation.xml中的定義:

    <field property="input" depends="required,codeinput"/>

    <field property="input" depends="required,codeinput"/>

    在servlet中將校驗碼存入session傳遞給Validator:

    req.getSession().setAttribute(Constants.SESSION_CHECKSUM_CODE,code);

    這樣就OK了。

    四、將校驗邏輯轉譯成JavaScript代碼

    由于Validator的代碼在服務器端被執行,因此如果校驗請求頻繁的話將會對服務器端造成不小的性能壓力。考慮到這個問題,Struts中提供的校驗方法可以被轉譯成JavaScript代碼嵌入頁面,這樣校驗將在客戶端進行。
    使用時,只要在頁面中嵌入兩條Struts html標簽庫中的標簽:

    1<html:javascript formName = "formName" />
    2<html:form action = "" onsubmit = "return validateFormName(this);" />

    其中第一行定義了需要轉譯的FormBean名,這里是“formName”,第二行在該FormBean封裝的表單上添加onsubmuit事件,而該事件調用的函數會在JSP請求到客戶端時由Validator框架自動生成,命名規則為“validateXXX”,其中“XXX”就是第一行中的formName屬性的值,這里是“formName”,因此生成的函數名為“validateFormName”。
    關于為自定義的Validator(如上文的MyValidator)創建JS代碼,我沒有實現過,感興趣的話可以去Struts官網上找一下相關文檔。
    posted on 2006-03-07 18:38 ^ Mustang ^ 閱讀(1821) 評論(1)  編輯  收藏 所屬分類: Struts

    FeedBack:
    # re: 在Struts中使用Validator實現可配置的信息校驗(二)
    2006-03-07 19:53 | 王巍成
    good!!:)  回復  更多評論
      
    主站蜘蛛池模板: 亚洲人成网77777色在线播放| 亚洲免费在线观看| 337p日本欧洲亚洲大胆色噜噜| 中国毛片免费观看| 国产AV无码专区亚洲AV漫画| 免费一级全黄少妇性色生活片| 国产精品免费_区二区三区观看| 亚洲AV永久无码精品放毛片| 日日操夜夜操免费视频| 特级毛片免费播放| 国产成人亚洲综合无码| 日韩免费观看一区| 久久亚洲精品国产精品| 免费无码又黄又爽又刺激| 亚洲日韩久久综合中文字幕| 免费A级毛片在线播放不收费| 成人在线免费视频| 亚洲va久久久噜噜噜久久狠狠| 在线看片免费人成视久网| 欧洲 亚洲 国产图片综合| 国产小视频在线免费| 久久精品免费大片国产大片| 78成人精品电影在线播放日韩精品电影一区亚洲| 99久久久国产精品免费牛牛| 国产亚洲sss在线播放| 四虎永久在线精品视频免费观看| 国产黄色片免费看| 亚洲经典在线中文字幕| 免费无码又爽又刺激毛片| 精品97国产免费人成视频| 亚洲黄网在线观看| 手机看片久久国产免费| 免费看少妇高潮成人片| 亚洲AV无码无限在线观看不卡| 亚洲国产精品一区二区九九| 最近2019免费中文字幕视频三| 亚洲欧美日韩久久精品| 久久亚洲高清观看| 香蕉高清免费永久在线视频| 成在人线av无码免费高潮喷水| 亚洲综合一区国产精品|