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,翻頁問題解決了。唉,遺憾的是學識淺薄,這個東西都是試出來的,沒辦法對它做詳細解釋。