【发布时间】:2020-07-22 16:45:12
【问题描述】:
我有一个由命名 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。所以我认为很明显我配置错了一些东西,但我不确定在哪里看。
【问题讨论】:
-
你的问题根本不是JSF引起的。我建议退后一步,了解会话的工作原理。这是一个很好的起点:stackoverflow.com/q/3106452 这必须为您提供新的见解,以便能够自行调试。
-
谢谢@BalusC 我知道会话是如何工作的 :-) 事实上,创建一个新会话听起来很奇怪。问题可能是应用程序部署在集群上,我怀疑该实例没有共享会话。
-
如果您已经知道会话是如何工作的,那么您究竟为什么要将故障推给在服务器上运行的随机 MVC 框架?在使用任何其他 MVC 框架甚至是普通的 JSP/Servlet 时,您仍然会遇到完全相同的问题..
-
因为经过调查,我意识到集群没有相互交谈。部署的应用程序基于 JSF。部分原始答案仍然存在,为什么 @RequestScoped bean 创建一个 JSESSIONID ?第二部分,为什么每次都创建一个新的是另一个问题。
-
@RequestScoped不会那样做。使用@SessionScoped时,您会遇到完全相同的问题,并且它会错误地表现得好像它是@RequestScoped。
标签: jsf glassfish jsessionid