我使用Mojarra 2.1.3,Netbeans 7.0.1,primefaces 3.2。
我目前处于困境,是否使用STATE_SAVING_METHOD客户端或服务器。目前我将保存方法设置为客户端。这涉及到我对许多物体的可插拔性进行调整。并将transient关键字放在无状态外观会话bean上。
@ManagedBean
@ViewScoped
public class SaProductController implements Serializable {
@EJB
transient SaProductFacade saProductFacade;
@EJB
transient SaKeywordFacade saKeywordFacade;
....
我的xhtml页面有一个带有分页的primefaces dataTable。第一次加载页面时,它通过显示数据表中的第一页来工作。但是,在单击下一页时,此行会抛出NullPointerException错误。
data = saProductFacade.selectAll(first, pageSize);
为什么?是因为saProductFacade @EJB属性被声明为瞬态,并且它在回发时被销毁到同一页面。无论如何,ViewScoped托管bean仍然活着。请帮忙,如何解决这个问题?或者我做错了吗?
有关信息,如果我将STATE_SAVING_METHOD设置为server,则此方法非常有效。但是浏览器后退按钮的危险使我决定进入客户端状态保存选项。而且,服务器上的内存限制保证了客户端状态的保存。
答案 0 :(得分:0)
仅供参考,对于初学者,我现在使用服务器状态保存方法。如果用户按下后退按钮,我会使用会话变量来记住我在哪里。这样,ViewScoped支持bean将重新创建并自动分页到用户上次查看的页面。这样我就可以在用户使用GET HTTP请求导航到另一个页面之前将用户重定向到他们的最后一个数据表页面。