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

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

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

    Java學習

    java,spring,structs,hibernate,jsf,ireport,jfreechart,jasperreport,tomcat,jboss -----本博客已經搬家了,新的地址是 http://www.javaly.cn 如果有對文章有任何疑問或者有任何不懂的地方,歡迎到www.javaly.cn (Java樂園)指出,我會盡力幫助解決。一起進步

     

    JSF中如何防止頁面刷新重復提交

    在WEB開發中都會碰見這樣的情況,就是用戶在進行了一項操作后按F5刷新頁面會重復提交頁面的問題。

    先了解下瀏覽器按F5會發生什么事,在按下F5后瀏覽器并不是簡單的刷新頁面,而是模擬上一次的請求一模一樣的再向服務器請求一次,加入上一次的請求 是向服務器請求保存數據,那按F5后就會再一次請求保存數據,這樣就等于重復提交了一次保存數據,如果我們系統中不做判斷的話,很容易在用戶不小心按F5 后再一次把數據保存進數據庫了。

    方案:

    因為按F5是完全模擬上次的請求再請求一次,可以說發送的數據和上次請求的是一樣的,就想到可以在客戶端和服務器端各保存一個標識狀態,然后在請求中比較2個表示狀態就好了。

    解決方法做成1個組件,這樣就可以在所有需要使用的頁面上使用該組件了,下面就直接看組件的代碼吧

    package com.byd.jsfcomponents.Refresh;

    import java.io.IOException;

    import jaax.faces.component.UIComponentBase;

    import javax.faces.context.ExternalContext;

    import javax.faces.context.FacesContext;

    import javax.faces.context.ResponseWriter;

    import javax.servlet.http.HttpSession;

    /** *//**

    * JSF中防刷新的控件 同時在客戶端和服務端保存一樣的值,

    * 每次請求都改變2個的值(和以前的值相反),如果是刷新,取到的客戶端的值將服務端的值不一樣。

    */

    public class HtmlRefresh extends UIComponentBase...{

    private boolean m_refreshState;

    private boolean m_isRefresh;

    /** *//**

    * 當前請求是否是刷新

    * @return true 是;false 不是;

    */

    public boolean IsRefresh()...{

    return m_isRefresh;

    }

    /** *//**

    * 返回對應的渲染器,這里沒有單獨的渲染器,所以返回null

    */

    public String getFamily()...{

    return null;

    }

    //

    /** *//**

    * 保存視圖

    */

    public Object saveState(FacesContext context)...{

    Object values[] = new Object[2];

    values[0] = super.saveState(context); // 系統自己的State

    // 保存客戶端的值

    values[1] = !m_refreshState;

    // 服務器的值保存到session中

    ExternalContext exContext = FacesContext.getCurrentInstance().getExternalContext();

    HttpSession session = (HttpSession)exContext.getSession(true);

    session.setAttribute("ServerRefresh",m_refreshState);

    return values;

    }

    /** *//**

    * 恢復視圖

    */

    public void restoreState(FacesContext context, Object state)...{

    Object values[] = (Object[]) state;

    super.restoreState(context, values[0]);

    this.m_refreshState = (Boolean)values[1];

    // 取服務器端值

    ExternalContext exContext = FacesContext.getCurrentInstance().getExternalContext();

    HttpSession session = (HttpSession)exContext.getSession(true);

    Boolean _bRefresh = false;

    if(session.getAttribute("ServerRefresh") != null)...{

    _bRefresh = Boolean.valueOf(session.getAttribute("ServerRefresh").toString());

    }

    m_isRefresh = m_refreshState == _bRefresh;

    }

    //

    }

    在頁面中使用如下:

    JAVABEAN代碼:

    private HtmlRefresh htmlRefresh1 = new HtmlRefresh();

    public HtmlRefresh getHtmlRefresh1() {

    return htmlRefresh1;

    }

    public void setHtmlRefresh1(HtmlRefresh htmlRefresh1) {

    this.htmlRefresh1 = htmlRefresh1;

    }

    public String button1_action() {

    // 先判斷是否刷新

    if(htmlRefresh1.IsRefresh()){

    this.label1.setText("請別刷新提交");

    }else{

    this.label1.setText("正常提交");

    }

    return null;

    }

    posted on 2009-07-23 14:57 找個美女做老婆 閱讀(1271) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     

    導航

    統計

    公告

    本blog已經搬到新家了, 新家:www.javaly.cn
     http://www.javaly.cn

    常用鏈接

    留言簿(6)

    隨筆檔案

    文章檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲视频在线免费观看| 亚洲国产精品久久丫| 韩日电影在线播放免费版| 久久精品国产亚洲av麻| 国产片AV片永久免费观看| 日本亚洲中午字幕乱码| 国产成人麻豆亚洲综合无码精品| 91热久久免费精品99| 亚洲AV无码一区二区三区牲色| 久久亚洲2019中文字幕| 91频在线观看免费大全| 一级做a爱片特黄在线观看免费看 一级做a爱过程免费视 | 黄页视频在线观看免费| 亚洲AV无码一区二区乱子伦| 无码永久免费AV网站| 国产精品免费久久久久影院| 亚洲一区精品视频在线| 亚洲最大AV网站在线观看| 免费A级毛片无码免费视| 中文永久免费观看网站| 亚洲中文无码卡通动漫野外 | 九月丁香婷婷亚洲综合色| 成人免费看吃奶视频网站| 97无码人妻福利免费公开在线视频| 亚洲人av高清无码| 亚洲AV日韩AV鸥美在线观看| 免费日本黄色网址| 无码区日韩特区永久免费系列| 四虎精品成人免费视频| 亚洲 欧洲 日韩 综合在线| 亚洲国产婷婷六月丁香| 免费a级黄色毛片| 成视频年人黄网站免费视频| 两个人看www免费视频| 男女猛烈xx00免费视频试看| 亚洲中文字幕人成乱码| 亚洲Av熟妇高潮30p| 亚洲日本va午夜中文字幕久久| 在线观看免费污视频| 国产精品久久免费| 久久免费国产精品一区二区|