我對JSF和/或一般的會話沒有太多懷疑。如何在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>
bean代碼是。
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方法剛剛輸入一個虛擬代碼。即使現在,頁面也如常顯示。
那麼,那是當我完全失去了。有人可以幫助我嗎?提前致謝。
@BalusC ..我嘗試了兩個,創建一個新的Web應用程序,也在新的瀏覽器中運行舊的..仍然是一樣的。沒有錯誤。另外,JSF是否根據會話託管bean的請求自行創建會話? –
您正在使用哪個JSF版本?自Mojarra 2.1.8以來,這個問題已經得到解決。 JSF不創建會話,servletcontainer創建它。會話範圍的bean實際上會隱含地需要一個會話,所以servlet容器應該創建一個,如果它還不存在的話。 – BalusC
jsf-api-2.1.0-b03.jar和jsf-impl-2.1.0-b03.jar –