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

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

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

    迷途書童

    敏感、勤學、多思
    隨筆 - 77, 文章 - 4, 評論 - 86, 引用 - 0
    數據加載中……

    防止任意形式的重復提交

    Struts Token 機制可以解決這個問題。

    1. ? 防止通過超鏈接重復訪問 Struts Action

    如果我們要防止 A 的默認頁面 J 中指向 K 的超鏈接重復提交數據,按照下列步驟即可:

    a. ? 如果 J 是從 Struts Action 轉發而來,我們要在該 Struts Action execute 方法中添加下面的一行:

    ??? saveToken(request);

    b. ? 如果 J 不是從 Struts Action 轉發而來,那么新建一個 Struts Action ,在該 Struts Action excute 方法中增加上面的一行,然后再從該 action 轉到 J 頁面。

    c. ? J 頁面中使用 Struts 標簽生成指向 K 的超鏈接,如:

    ?? <html:link action="/deleteLayoutAction?layoutId=0" transaction="true" >delete</html:link>

    ?? 注意紅色字體部分。

    d. ? <html:link> 標簽指向的 action excute 方法中加入下面的代碼:

    ?? if (!isTokenValid(request)) {

    ???????????????????? return mapping.findForward(" 這種情況下就是重復提交,轉到相應的頁面 ");

    ????????????? }

    e All Done.

    2. ? 防止通過表單重復提交數據。

    a. ? 如果 J 是從 Struts Action 轉發而來,我們要在該 Struts Action execute 方法中添加下面的一行:

    ??? saveToken(request);

    b. ? 如果 J 不是從 Struts Action 轉發而來,那么新建一個 Struts Action ,在該 Struts Action excute 方法中增加上面的一行,然后再從該 action 轉到 J 頁面。

    c. ? J 頁面中表單 Action 屬性指向的 Struts action excute 方法中加入下面的代碼:

    ?? if (!isTokenValid(request)) {

    ?????????? saveToken(request);

    ???????????????????? return mapping.findForward(" 這種情況下就是重復提交,轉到相應的頁面 ");

    ?? saveToken(request);

    ????????????? }

    e All Done.

    posted on 2006-05-06 15:54 迷途書童 閱讀(2091) 評論(9)  編輯  收藏 所屬分類: java應用

    評論

    # re: 防止任意形式的重復提交  回復  更多評論   

    Struts 的 Token 機制可以解決這個問題。

    如果沒用Struts 怎么辦哇 .................. 郁悶。
    2006-05-06 17:52 | Web 2.0 技術資源

    # re: 防止任意形式的重復提交  回復  更多評論   

    可以仿照struts的token機制原理自己實現一下,very easy!
    2006-05-06 19:31 | 獨孤過客

    # re: 防止任意形式的重復提交  回復  更多評論   

    我想知道一個事情:
    使用了令牌機制之后,如果在同一個客戶端打開兩個同樣的窗口,那么豈不是新的窗口可以提交表單,舊的窗口就無法提交了呢?

    如果是這樣的話,令牌機制也不是十分完美啊,如果是在論壇里面使用的話,往往會打開若干個窗口,只有最新的一個窗口可以正確提交表單,簡直糟糕透了。
    2006-05-07 10:54 | Jonney

    # re: 防止任意形式的重復提交  回復  更多評論   

    其實還有比較難處理的情況:

    return mapping.findForward(" 這種情況下就是重復提交,轉到相應的頁面 ");

    在應用中,這個相應的頁面可能是動態的.
    比如說首次提交是成功的,那么重復提交就應該也到成功頁面.
    如果首次提交是失敗的,那么重復提交就應該也到失敗頁面.
    但是在代碼中我們只知道是重復提交,卻不知道首次提交的結果.
    所以無法決定應該轉到什么頁面.

    當然, 如果技術能夠驅動需求, 比如發生重復提交時顯示指定的頁面.
    問題可以解決.但是把技術上的問題暴露給用戶,終歸不是很友好.
    2006-05-09 07:12 | InPractice

    # re: 防止任意形式的重復提交  回復  更多評論   

    樓上說的有一定的道理,喪失一點友好性總比引起數據不一致要好得多,所謂”魚與熊掌不能兼得“
    2006-05-09 23:09 | 獨孤過客

    # re: 防止任意形式的重復提交  回復  更多評論   

    你們很強啊

    我為你們感到驕傲
    2006-05-17 00:54 | 夢游客

    # 愛我蒙古  回復  更多評論   

    bi mongl ges neen heezee ged buu maart!
    2006-07-02 05:03 | 蒙古人175866762

    # re: 防止任意形式的重復提交  回復  更多評論   

    “防止任意形式的重復提交”標題起得真好聽,可惜要用Struts 框架,建議該標題為:“利用Struts 框架,防止任意形式的重復提交”
    2006-11-23 12:25 | 被蒙騙的人

    # re: 防止任意形式的重復提交  回復  更多評論   

    使用了令牌機制之后,如果在同一個客戶端打開兩個同樣的窗口,那么豈不是新的窗口可以提交表單,舊的窗口就無法提交了呢?
    這個問題確實很鬧心。我還沒有解決掉。
    2007-05-22 08:58 | wts
    主站蜘蛛池模板: 亚洲视频一区在线| 亚洲国产成人久久一区久久 | 亚洲国产成人久久综合碰| 亚洲真人无码永久在线观看| 在线观看免费人成视频色9| 亚洲人成在线中文字幕| 免费视频专区一国产盗摄| 亚洲人成网网址在线看| AA免费观看的1000部电影| 亚洲欧好州第一的日产suv| 国产免费av片在线播放| 看免费毛片天天看| 精品国产日韩亚洲一区| 免费国产叼嘿视频大全网站| 亚洲五月激情综合图片区| 永久在线免费观看| 亚洲xxxx视频| 亚洲成a人无码av波多野按摩| 一级毛片一级毛片免费毛片| 亚洲伊人久久成综合人影院| 免费黄网站在线看| 亚洲沟沟美女亚洲沟沟| 国产精品冒白浆免费视频| 免费视频成人国产精品网站| 亚洲国产精品一区二区第一页| 亚洲免费电影网站| 亚洲AV日韩综合一区| 亚洲一区二区三区国产精品| 免费av片在线观看网站| 亚洲成综合人影院在院播放| 日本特黄特黄刺激大片免费| 天黑黑影院在线观看视频高清免费| 亚洲av永久无码精品秋霞电影影院| 美女视频黄免费亚洲| 免费看内射乌克兰女| 久久国产亚洲高清观看| 四虎国产精品免费视| 一级毛片在线免费观看| 精品久久久久久久久亚洲偷窥女厕| 国产亚洲婷婷香蕉久久精品 | 在线jlzzjlzz免费播放|