我有一个由命名bean支持的简单页面。该页面也使用了primefaces,但是我没有在该页面中执行任何ajax操作。该应用程序托管在Glassfish 5.1上。
@Named("cardsView")
@RequestScoped
public class CardsViewBean implements Serializable {
...
}
这是xhtml页面。如您所见,我正在将bean传递给主xhtml,不确定是最佳实践还是问题的根源。
<ui:composition template="/fragment/master.xhtml"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:p="http://primefaces.org/ui"
xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
xmlns:ipc="http://java.sun.com/jsf/composite/component">
<ui:param name="bean" value="${cardView}" />
<ui:define name="content">
.....
</ui:define>
</ui:composition>
据我了解,请求范围内的bean仅用于该请求。
但是,当我查看浏览器检查器时,可以看到每次我访问页面时都会创建一个新的JSESSIONID。因此,我认为显然有些东西我配置有误,但不确定在哪里看。
实际上,每页有2个请求。初始请求和回发请求。首先,客户端请求获取页面。它本身就是完整的请求。要求:http://example.com/index响应:html页面。用户点击“提交”按钮或另一个按钮或链接后,浏览器再次请求另一个页面。要求:http://example.com/login回应:另一页。换句话说,Jsf或任何Ui框架通过各种技术和方法在2个对我们的请求之间保存信息见this question about Initial request and postback request和Jsf lifecycle和primeFaces lifeCycle show case编码愉快!