我对 JSF 和/或一般情况下的会话几乎没有疑问。
首先,会话是在加载 AS/servlet 容器中的 Web 应用程序时创建的吗?意思是,在我右键单击 - 运行为 - 在服务器上运行并且应用程序启动并同步之后?
还是在加载 Web 应用程序并显示定义的欢迎页面然后客户端发出请求后创建它?
第二:我正在研究 jsf 中“提交响应后无法创建会话”的问题。
我试图通过在以下站点http://java.net/jira/browse/JAVASERVERFACES-2215中给出的这样做来重现该问题
但是,如上所述,我没有收到任何错误。我尝试了所有 bean 范围。会话是否已创建?
这是代码。
<h:body>
<h:form id="test">
<p:growl id="msg"></p:growl>
<h:outputText value="#{myTestBean.exceedBuffer}" />
</h:form>
</h:body>
豆码是。
public String getExceedBuffer() {
int size = FacesContext.getCurrentInstance().getExternalContext().getResponseBufferSize();
char[] chars = new char[size];
Arrays.fill(chars, 'x');
return new String(chars);
}
我的理解如下,
首先,当加载应用程序时,servlet 容器或 AS 创建一个会话和一个 sessionID(JSESSIONID) 并将其放入服务器内存中。因此,无论如何都会加载初始页面,这意味着即使响应缓冲区是否溢出,但不会创建会话。现在,当客户端在此页面上发出请求时,由于未创建会话,因此发生错误。但是,我什至尝试这样做
<p:commandButton actionListener="#{myTestBean.onSelect}" update=":test"></p:commandButton>
并在 onSelect 方法中输入了一个虚拟代码。即使现在页面照常显示。
好吧,那是我完全迷路的时候。有人可以帮我吗?提前致谢。