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

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

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

    Shao Fan

    關(guān)于JAVA與軟件工程
    posts - 31, comments - 71, trackbacks - 0, articles - 4
      BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    Struts2客戶端驗(yàn)證的一個(gè)bug

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

    它的客戶端驗(yàn)證的流程大概是這樣,用戶提交表單時(shí),對(duì)各個(gè)控件的輸入按預(yù)先設(shè)置的規(guī)則進(jìn)行驗(yàn)證,如果有問(wèn)題,則清除表單里原有的出錯(cuò)提示信息,并寫(xiě)入新的提示。其設(shè)計(jì)的功能是把出錯(cuò)信息寫(xiě)表格里出錯(cuò)控件的上方,以便用戶看得更加清楚。問(wèn)題就出在其用來(lái)清除原出錯(cuò)信息的函數(shù),其代碼是這樣的(在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 }


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

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

    評(píng)論

    # re: Struts2客戶端驗(yàn)證的一個(gè)bug  回復(fù)  更多評(píng)論   

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

    # re: Struts2客戶端驗(yàn)證的一個(gè)bug  回復(fù)  更多評(píng)論   

    2008-01-25 12:13 by encodinglife
    struts 2.1 發(fā)布了嗎
    剛才到struts home 只有2.0.11版本的
    沒(méi)有 2.1 版本的
    這是怎么回事???
    請(qǐng)博主回復(fù)一下

    # re: Struts2客戶端驗(yàn)證的一個(gè)bug[未登錄](méi)  回復(fù)  更多評(píng)論   

    2008-01-27 16:13 by shaofan
    樓上的提醒,剛?cè)タ戳艘谎?,struts還真是沒(méi)發(fā)布到2.1.0,現(xiàn)在最高版本是2.0.11。但是JIRA上確實(shí)顯示去年5月份這個(gè)BUG已經(jīng)被搞定了,但是不知道為什么修復(fù)的版本是2.1.0。也許是寫(xiě)錯(cuò)了??我現(xiàn)在沒(méi)有用struts在開(kāi)發(fā)了,樓上試試最2.0.11,也許已經(jīng)修復(fù)了?
    主站蜘蛛池模板: 一级特黄特色的免费大片视频| 亚洲男人天堂影院| 久久美女网站免费| 91嫩草私人成人亚洲影院| 蜜桃视频在线观看免费网址入口 | 中文字幕亚洲情99在线| 免费人成视网站在线观看不卡| 十八禁视频在线观看免费无码无遮挡骂过 | 日韩免费a级毛片无码a∨| 极品美女一级毛片免费| 亚洲va无码手机在线电影| 国产92成人精品视频免费| 精品久久久久亚洲| 亚洲第一永久在线观看| 免费在线观看一级毛片| 免费黄色福利视频| 国产精品内射视频免费| 四虎影视永久免费观看地址| a级毛片免费全部播放无码| 亚洲精品V天堂中文字幕| 亚洲av最新在线网址| 四虎永久免费影院在线| 在线观看永久免费| 精品国产污污免费网站入口| 色噜噜亚洲男人的天堂| 亚洲成人动漫在线| 亚洲欧洲中文日韩av乱码| 日本一区二区三区免费高清| 午夜精品射精入后重之免费观看 | 91精品免费不卡在线观看| 美女视频黄频a免费| 亚洲免费在线视频播放| 亚洲av中文无码乱人伦在线r▽| 国产免费AV片无码永久免费| 国产成人免费在线| 日本免费久久久久久久网站| 视频免费1区二区三区| 亚洲成aⅴ人片久青草影院按摩| 亚洲网站在线免费观看| 亚洲av无码乱码国产精品| 2022中文字字幕久亚洲|