<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!!:)  回復  更多評論
      
    主站蜘蛛池模板: 亚洲欧洲日本在线| 国产一区二区三区免费视频| 亚洲va久久久噜噜噜久久男同 | 全亚洲最新黄色特级网站| 亚洲老熟女五十路老熟女bbw | 亚洲av无码国产精品色在线看不卡| 亚洲熟妇无码八V在线播放| 免费黄色小视频网站| 亚洲码欧美码一区二区三区| 国产一区二区三区免费看| 又长又大又粗又硬3p免费视频 | 免费在线不卡视频| 黄视频在线观看免费| 国产成人麻豆亚洲综合无码精品| 精品国产免费人成网站| 亚洲AV无码国产在丝袜线观看| 日韩精品无码一区二区三区免费 | 免费亚洲视频在线观看| 成人国产精品免费视频| 亚洲国产一区二区三区青草影视| 3d成人免费动漫在线观看| 亚洲国产精品无码久久| 亚洲精品乱码久久久久久蜜桃| 成全视频高清免费观看电视剧 | 亚洲精品中文字幕乱码影院| 亚洲高清中文字幕免费| 视频一区二区三区免费观看| 国产亚洲美女精品久久久2020 | 18pao国产成视频永久免费| 一本色道久久88—综合亚洲精品 | 亚洲自偷自偷在线成人网站传媒| 免费人成在线观看视频播放| 久久国产乱子精品免费女| 亚洲AV男人的天堂在线观看| 亚洲熟妇无码乱子AV电影| 久久国内免费视频| eeuss影院免费直达入口| 中文字幕亚洲男人的天堂网络 | 女人被弄到高潮的免费视频 | 亚洲一区二区三区免费观看| 亚洲AV无码乱码在线观看性色扶|