У меня мало сомнений по поводу сессий в JSF и/или вообще.Как создается сеанс в приложении JSF?
Прежде всего, создается ли сеанс при загрузке веб-приложения в контейнер AS/servlet? Смысл, после того, как я сделаю правильный клик, запустив на сервере, и приложение запущено и синхронизировано?
Или он создается после загрузки веб-приложения и отображается определенная страница приветствия, а затем клиент делает запрос?
Во-вторых: Я искал вопрос «Невозможно создать сеанс после того, как ответ был зафиксирован» в 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>
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>
и в методе onВыбор только что ввел фиктивный код. Даже сейчас страница отображается как обычно.
Ну, это было, когда я был полностью потерян. Может ли кто-нибудь помочь мне в этом? Заранее спасибо.
@BalusC .. Я попробовал оба, создал новое веб-приложение, а также запустил старый в новом браузере. Тем не менее. Нет ошибки. Также, создает ли JSF сеанс сам по запросу управляемого сеансом компонента? –
Какую версию JSF вы используете? Вопрос был исправлен с Mojarra 2.1.8. JSF не создает сеанс, его создает servletcontainer. Компонент, обработанный сеансом, действительно неявно требует сеанса, поэтому servletcontainer должен создать один, если он еще не существует. – BalusC
jsf-api-2.1.0-b03.jar и jsf-impl-2.1.0-b03.jar –