jsf IsPostBack 的实现和翻页问题

时间:2022-06-21 20:02:35
 
 
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,翻页问题解决了。唉,遗憾的是学识浅薄,这个东西都是试出来的,没办法对它做详细解释。