jsf IsPostBack 的實現和翻頁問題

javax.faces.STATE_SAVING_METHOD
client

   aspx中有 isPostBack()方法來區分是否是回傳。在jsf中沒這樣一個方法,在做查詢的時候,希望首次進入的時候默認查出第一頁數據,這樣就需要判斷是首次進入,還是翻頁了。經過仔細debug發現在首次進入頁面的時候,ResponseWriter 是null,在postback的時候是有值的。於是就寫了個 isPostBack 方法:

    public boolean isPostback()
    {
        boolean isPostBack = false;
        javax.faces.context.FacesContext context = javax.faces.context.
                FacesContext.getCurrentInstance();
        if ( context.getResponseWriter() == null )
        { //回發
            isPostBack = true;
        }
        else
        {
            isPostBack = false;
        }
        return isPostBack;
    }
ok,這下實現了PostBack的判斷.但運行一段時間後用戶說查詢翻頁多點幾次後就不再起作用,必須要退出重新登錄才能繼續了。
首先懷疑是seesion中的東西太多,太亂:將查詢結果一併存入session了的,如果查詢的是以前查過的頁,則只需要在session中取。(貌似是有點費馬達)。於是把查詢結果的緩存在session中的代碼全部去掉,然後再將session中的值輸出來看一下:
---------the session is ------------
 --/QS/ConsignMent.jsp=javax.faces.component.UIViewRoot@496381
 --/Main.jsp=javax.faces.component.UIViewRoot@f94dad
 --PagingInfo={PageIndex=4, IsPaging=true, PageSize=20, PageCount=5, RecordCount=83}
 --user=bpm.views.UserView@10e1567
 --/Frame.jsp=javax.faces.component.UIViewRoot@79f0ec
 --com.sun.faces.VIEW_LIST=[/login.jsp, /Frame.jsp, /Main.jsp, /WorkFlow/WF_Left.jsp, /QS/ConsignMent.jsp, /QS/ConsignMent.jsp, /QS/ConsignMent.jsp, /QS/ConsignMent.jsp]
 --userRoles=9
 --javax.faces.request.charset=UTF-8
 --/WorkFlow/WF_Left.jsp=javax.faces.component.UIViewRoot@c3e952
 --/login.jsp=javax.faces.component.UIViewRoot@1b54eb0
 --jsf_sequence=1
問題依然存在,想想,覺得可能是VIEW_LIST上的問題,google了一下,發現可以在客戶端或服務器保存 viewstate  信息,只需要在web.xml中配置:
<context-param>
<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
<param-value>client</param-value>
</context-param>
於是試着改爲client,翻頁問題解決了。唉,遺憾的是學識淺薄,這個東西都是試出來的,沒辦法對它做詳細解釋。
發佈了29 篇原創文章 · 獲贊 6 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章