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

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

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

    Shao Fan

    關于JAVA與軟件工程
    posts - 31, comments - 71, trackbacks - 0, articles - 4
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    Struts2客戶端驗證的一個bug

    Posted on 2007-06-03 17:56 shaofan 閱讀(2537) 評論(3)  編輯  收藏 所屬分類: Java
    Struts2默認theme是xhtml,它用表格來對表單中的控件進行排版。它也提供一個客戶端的js驗證功能,但是它的js腳本卻有些問題,在某些情況下,前次驗證的提示信息無法被清除,提示信息會不斷的累積顯示在屏幕上。而按照設計,每次提交表單時應只顯示每次驗證的出錯信息。

    它的客戶端驗證的流程大概是這樣,用戶提交表單時,對各個控件的輸入按預先設置的規則進行驗證,如果有問題,則清除表單里原有的出錯提示信息,并寫入新的提示。其設計的功能是把出錯信息寫表格里出錯控件的上方,以便用戶看得更加清楚。問題就出在其用來清除原出錯信息的函數,其代碼是這樣的(在struts.jar的template/xhtml目錄下可以找到):

     1 function clearErrorMessages(form) {
     2 
     3     var table = form.childNodes[1];
     4     iftypeof table == "undefined" ) {
     5         table = form.childNodes[0];
     6     }
     7 
     8     // clear out any rows with an "errorFor" attribute
     9     var rows = table.rows;
    10     var rowsToDelete = new Array();
    11     if (rows == null){
    12         return;
    13     }
    14 
    15     for(var i = 0; i < rows.length; i++) {
    16         var r = rows[i];
    17         if (r.getAttribute("errorFor")) {
    18             rowsToDelete.push(r);
    19         }
    20     }
    21 
    22     // now delete the rows
    23     for (var i = 0; i < rowsToDelete.length; i++) {
    24         var r = rowsToDelete[i];
    25         table.deleteRow(r.rowIndex);
    26         //table.removeChild(rowsToDelete[i]);
    27     }
    28 }


    看這個函數的前三行,它試圖取得form的第1個或第2個子節點,并把它作為table來處理(看接下來的幾行)。要想清除表格里的錯誤信息,首先要取得表格本身,這沒錯,但是如果第1個或第2個子節點不是table的話,腳本就會出錯,造成原出錯信息無法清除,這樣每次提交后的提示信息就會累積在屏幕上。

    要解決這個問題有兩個辦法:
    • 寫代碼時要小心,保證form的第1或2個子節點是table,不要在生成table前加其他代碼。
    • 或,修改xhtml的validation.js,使它總能獲得正確的table元素,重新打包到struts.jar。
    剛看了一下Struts的JIRA,已經有人報告了這個問題(id WW-1802),而且這個bug在2.1版本中已經解決了。

    評論

    # re: Struts2客戶端驗證的一個bug  回復  更多評論   

    2008-01-25 11:59 by encodinglife
    找了很久 終于找到 錯誤信息累加 的原因了
    多謝了!!!

    # re: Struts2客戶端驗證的一個bug  回復  更多評論   

    2008-01-25 12:13 by encodinglife
    struts 2.1 發布了嗎
    剛才到struts home 只有2.0.11版本的
    沒有 2.1 版本的
    這是怎么回事啊?
    請博主回復一下

    # re: Struts2客戶端驗證的一個bug[未登錄]  回復  更多評論   

    2008-01-27 16:13 by shaofan
    樓上的提醒,剛去看了一眼,struts還真是沒發布到2.1.0,現在最高版本是2.0.11。但是JIRA上確實顯示去年5月份這個BUG已經被搞定了,但是不知道為什么修復的版本是2.1.0。也許是寫錯了??我現在沒有用struts在開發了,樓上試試最2.0.11,也許已經修復了?
    主站蜘蛛池模板: 99精品视频免费在线观看| 亚洲av一综合av一区| 91精品免费久久久久久久久| 免费大片av手机看片| 亚洲中文久久精品无码1| 亚洲av综合色区| 精品国产亚洲一区二区在线观看| 免费无码又爽又高潮视频 | 全黄性性激高免费视频| 免费人成在线观看69式小视频| 国产免费拔擦拔擦8X高清在线人| 老司机免费午夜精品视频| 国产成人亚洲综合网站不卡| 亚洲精品亚洲人成在线观看麻豆| 久久精品国产亚洲麻豆| 国产成人综合亚洲亚洲国产第一页| 国产在线19禁免费观看国产| 最近的免费中文字幕视频 | 亚洲另类古典武侠| 久久青青草原亚洲av无码app| 亚洲综合另类小说色区| 久久国产成人亚洲精品影院| 哒哒哒免费视频观看在线www| 免费的一级黄色片| 免费看a级黄色片| 国产乱子伦精品免费无码专区 | 亚洲人成网国产最新在线| 久久久久亚洲AV片无码下载蜜桃 | 无码国产精品一区二区免费式芒果 | 青青草国产免费国产是公开| 婷婷国产偷v国产偷v亚洲| 国产AV无码专区亚洲AV蜜芽| 色婷婷亚洲一区二区三区| 日韩国产欧美亚洲v片| 日本人的色道免费网站| 久艹视频在线免费观看| 国内精品免费久久影院| 黄色网站软件app在线观看免费| 99久久成人国产精品免费| 日本高清不卡aⅴ免费网站| 一个人免费视频观看在线www|