2013-05-29 1 views
1

наш клиент не хочет иметь сеанс обработки с печеньем, и это также вызовет проблемы с Apache/mod_rewrite шлюза, поэтому я попытался использоватьViewExpiredException с режимом отслеживания URL в Glassfish3

<tracking-mode>URL</tracking-mode> 

в нашей сети .xml. Это должно быть все с Glassfish3/Servlet 3.0. Однако в настоящее время я получаю ViewExpiredExceptions при попытке войти в систему (это не запрос AJAX):

<p:commandButton id="submit" 
       value="${msg['Login.submit.label']}" 
       action="#{loginBean.login}" 
       ajax="false"/> 

Я также попытался сохранить сессию на стороне клиента, чем я могу видеть JSESSIONID в URL, но это бросает NotSerializableExceptions для моих @EJB. Есть идеи? Я что-то пропустил? Он отлично работал с файлами cookie.

UPDATE: LoginBean.login возвращает «Home.xhtml? Faces-redirect = true», ожидаемое поведение при нажатии команды Command: POST на Login.xhtml, моей странице входа, перенаправлении и GET на Home.xhtml.

ВТОРОЕ ОБНОВЛЕНИЕ: Похоже, что мое действие так и не вызвано, я напрямую получаю сообщение ViewExpiredException и код ошибки HTTP 500.

ТРЕТЬЕ ОБНОВЛЕНИЕ: Похоже, что HttpSession всегда имеет значение null с режимом отслеживания, установленным для URL-адреса, и файлы cookie корректно созданы HttpSession. Не должно ли FacesServlet создавать сеанс и добавлять JSESSIONID в URL-адрес, если сеанс отсутствует?

ДРУГОЙ UPDATE: С

<param-name>javax.faces.STATE_SAVING_METHOD</param-name> 
<param-value>client</param-value> 

сессия будет создана на постбэка. Но чем я столкнулся с

java.io.NotSerializableException 

.

+0

Является ли ваша задняя сторона видимой? – Makky

+0

@Makky LoginBean запрашивается, но изменение этого на ViewScoped не помогает. –

ответ

0

Другой вариант заключается в том, чтобы установить совместимость представления просмотра в значение true.

Отредактируйте ваш web.xml и добавьте следующий код и попробуйте.

<context-param> 
    <param-name>com.sun.faces.enableRestoreView11Compatibility</param-name> 
    <param-value>true</param-value> 
</context-param> 

Обновлено:

Reference

com.sun.faces.enableRestoreView11Compatibility является 1,2 установка JSF, который говорит JSF 1.2 вести себя как JSF 1.1.

com.sun.faces.enableRestoreView11Compatibility == true означает, что «не бросайте исключение ViewExpiredException, а просто создайте новое представление, если старый истек».

фирмы IBM отмечает на поведение JSF 1.1 говорит:

Это может иметь негативные модели поведения, потому что это новый вид, и элементы, которые, как правило, с точки зрения, например, состояние, больше не будет там ,

По умолчанию JSF 1.2 поведение определяется в спецификации, как это:

Если запрос является постбэк, вызовите ViewHandler.restoreView(), передавая экземпляр FacesContext для текущего запроса и идентификатора вида, и возвращает UIViewRoot для восстановления Посмотреть. Если возврат из ViewHandler.restoreView() равен NULL, введите исключение ViewExpiredException с соответствующим сообщением об ошибке. javax.faces.application.ViewExpiredException - это исключение FacesException, которое должно быть передано в приложение, чтобы ожидаемое представление не было возвращено для идентификатора вида. Приложению может быть предложено выполнить какое-либо действие на основе этого исключения.

Чтобы исключить ViewExpiredException при истечении срока действия представления, удалите параметр com.sun.faces.enableRestoreView11Compatibility или установите для него значение false.

Пространство имен com.sun предполагает, что этот параметр является параметром Sun/Mojarra и производной спецификой для реализации, поэтому он, вероятно, не будет работать со всеми реализациями JSF.

+0

Что подразумевает этот параметр? Любые недостатки/импликации, о которых я должен знать? Это больше похоже на обходной путь, значит ли это, что я делаю все правильно но я столкнулся с какой-то ошибкой? –

+0

Это мой рабочий стол, чтобы увидеть мой обновленный ответ для получения дополнительной информации. – Makky

+0

К сожалению, это не помогает, теперь я остаюсь на своей странице входа, не перенаправляясь на домашнюю страницу. LoginBean. login возвращает «/Home.xhtml?faces-redirect=true», но я не вижу переадресацию, только POST на Login.xhtml, мою страницу входа. –