JSFおよび/または一般的なセッションについてはほとんど疑問がありませんでした。
まず、AS /サーブレットコンテナにWebアプリをロードするとセッションが作成されますか?つまり、右クリックして実行した後、サーバーで実行すると、アプリが起動して同期されますか?
または、Webアプリが読み込まれ、定義されたウェルカムページが表示されてから、クライアントがリクエストを行った後に作成されますか?
2番目: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);
}
私の理解は次のとおりです、
まず、アプリが読み込まれると、サーブレットコンテナまたはASがセッションとsessionID(JSESSIONID)を作成し、サーバーメモリに配置します。したがって、最初のページはとにかくロードされます。つまり、応答バッファがオーバーフローしたかどうかに関係なく、セッションは作成されません。これで、クライアントがこのページでリクエストを行うと、セッションが作成されなかったため、エラーが発生します。でも、これもやってみました
<p:commandButton actionListener="#{myTestBean.onSelect}" update=":test"></p:commandButton>
onSelectメソッドにダミーコードを入力しました。今でもいつものようにページが表示されています。
さて、それは私が完全に失われたときでした。誰かplsはこれで私を助けることができますか?前もって感謝します。