如何在 JSF 应用程序中创建会话



我对JSF和/或一般的会话几乎没有疑问。

首先,会话是否在 AS/servlet 容器中的 Web 应用程序加载时创建?意思是,在我右键单击 - 运行方式 - 在服务器上运行并且应用程序启动并同步后?

还是在加载 Web 应用并显示定义的欢迎页面,然后客户端发出请求后创建它?

第二:我正在研究 jsf 中的"提交响应后无法创建会话"的问题。

我试图通过以下站点中给出的执行此操作来重现该问题,http://java.net/jira/browse/JAVASERVERFACES-2215

但是,如上所述,我没有收到任何错误。我尝试了所有豆类范围。会话是否已创建?

这是代码。

  <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 会创建一个会话和一个会话 ID(JSESSIONID(,并将其放入服务器内存中。因此,无论如何都会加载初始页面,这意味着即使响应缓冲区是否溢出,也不会创建会话。现在,当客户端在此页面上发出请求时,由于未创建会话,因此会发生错误。但是,我甚至尝试这样做

<p:commandButton actionListener="#{myTestBean.onSelect}" update=":test"></p:commandButton>   

在onSelect方法中,刚刚输入了一个虚拟代码。即使现在页面也照常显示。

嗯,那是我完全迷路的时候。有人可以帮我吗?提前谢谢。

首先,会话是否在 AS/servlet 容器中的 Web 应用程序加载时创建?意思是,在我右键单击 - 运行方式 - 在服务器上运行并且应用程序启动并同步后?

还是在加载 Web 应用并显示定义的欢迎页面,然后客户端发出请求后创建它?

它是在 HTTP 会话启动时创建的,而不是在 Web 应用的启动时创建的(这是应用程序范围(。基本上,当第一次调用request.getSession()并且尚未创建HttpSession时。这一切都由JSF在幕后使用的Servlet API处理。因此,以下答案应该有助于理解它是如何工作的:servlets是如何工作的?实例化、会话、共享变量和多线程

<小时 />

第二:我正在研究 jsf 中的"提交响应后无法创建会话"的问题。

我试图通过以下站点中给出的方法来重现该问题,http://java.net/jira/browse/JAVASERVERFACES-2215

但是,如上所述,我没有收到任何错误。我尝试了所有豆类范围。会话是否已创建?

如果在提交响应时尚未创建HttpSession,则会收到此错误。您没有收到此错误只能意味着会话已经事先创建。您需要在新启动的 Web 应用程序上对其进行测试,并且不应创建会话。请注意,默认情况下,某些服务器将会话存储在 shutown/restart 上。在此测试页面上发送第一个请求之前,您需要禁用此功能或删除浏览器中的JSESSIONID cookie。重新启动 Web 浏览器或使用其他浏览器也应该强制使用新的会话。

相关内容

  • 没有找到相关文章

最新更新