Проблема JSF после перезапуска сервера: не удалось найти сохраненное состояние просмотра - PullRequest
2 голосов
/ 30 июня 2011

Продолжить решение этой проблемы , я заменил Мохарра на MyFaces и обновил JDK, и когда я продолжаю работать над формой после перезапуска сервера, появляется следующая ошибка появляется:

Произошла ошибка:

/food.xhtmlNo saved view state could be found for the view identifier: /food.xhtml

Caused by:
javax.faces.application.ViewExpiredException - /food.xhtmlNo saved view state could be found for the view identifier: /food.xhtml

Консоль :

SEVERE: Exception loading sessions from persistent storage
java.lang.IllegalStateException: unread block data
    at java.io.ObjectInputStream$BlockDataInputStream.setBlockDataMode(ObjectInputStream.java:2376)

Трассировка стека:

javax.faces.application.ViewExpiredException: /food.xhtmlNo saved view state could be found for the view identifier: /food.xhtml
    at org.apache.myfaces.lifecycle.RestoreViewExecutor.execute(RestoreViewExecutor.java:128)
    at org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:171)
    at org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:189)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:563)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:399)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:317)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:204)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:182)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:311)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    at java.lang.Thread.run(Thread.java:662)

И мой web.xml:

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
         xmlns="http://java.sun.com/xml/ns/javaee" 
         xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
         id="WebApp_ID" version="3.0">

  <display-name>PORTAL</display-name>
  <session-config>
    <session-timeout>180</session-timeout>
  </session-config>

  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.xhtml</welcome-file>
    <welcome-file>index.htm</welcome-file>
  </welcome-file-list>
  <servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.xhtml</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.jsf</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.faces</url-pattern>
  </servlet-mapping>

  <context-param>
    <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
    <param-value>client</param-value>
  </context-param>
  <context-param>
    <param-name>javax.servlet.jsp.jstl.fmt.localizationContext</param-name>
    <param-value>resources.application</param-value>
  </context-param>
  <context-param>
    <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
    <param-value>.xhtml</param-value>
  </context-param>

</web-app>

Вы когда-нибудь встречали такое сообщение об ошибке?

Ответы [ 5 ]

4 голосов
/ 04 октября 2012

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

По умолчанию MyFaces выполняет сериализацию состояния, даже когда состояние сохраняется на сервере, а Mojarra - нет.Итак, если у вас есть некоторые bean-компоненты, которые не сериализуются или используют другие bean-компоненты, которые не сериализуются, вы увидите эту ошибку (сервер не может сериализовать объект).

Вы можете отключить сериализацию, чтобы MyFaces работал как Mojarra.Проверьте эту ссылку: ViewScoped Bean причиной NotSerializableException

3 голосов
/ 11 июля 2011

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

Чтобы решить эту проблему, вам нужно настроить некоторые параметры веб-конфигурации, особенно org.apache.myfaces.SECRET и org.apache.myfaces.MAC_SECRET, поэтомуодин и тот же секрет используется каждый раз при перезапуске вашего сервера.У Mojarra тоже есть что-то похожее, но я не помню названия параметра в данный момент.

Проверьте эту страницу Защитите свое приложение с MyFaces .Там вы можете найти все детали, необходимые для настройки шифрования.

Вы можете отправлять вопросы о MyFaces, подписавшись на Users и Списки рассылки разработчиков

2 голосов
/ 17 марта 2012

Как уже говорилось, в другом ответе необходимо определить СЕКРЕТ.Я следовал инструкциям на Secure_Your_Application .Я добавил следующие строки в web.xml (измените секреты соответственно).И не забудьте загрузить файлы политик JCE неограниченной силы.

<context-param>
  <param-name>org.apache.myfaces.ALGORITHM</param-name>
  <param-value>AES</param-value>
</context-param>
<!-- Defines the secret (Base64 encoded) used to initialize the secret key
     for encryption algorithm. The size of it depends on the algorithm used for encryption -->
<context-param>
  <param-name>org.apache.myfaces.SECRET</param-name>
  <param-value>MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIz</param-value>
</context-param>
<!-- Define the initialization code (Bas64 encoded) that are used to initialize the secret key used
     on the Message Authentication Code algorithm. The size of it depends on the algorithm used for mac calculation -->
<context-param>
  <param-name>org.apache.myfaces.MAC_SECRET</param-name>
  <param-value>YWJjZDEyMzQ=</param-value>
</context-param>
0 голосов
/ 28 августа 2012

Я обычно получаю эту ошибку.Я использую myfaces 1.2 и websphere 7, но тогда я не перезагружал сервер.Сначала я остановил сервер, затем снова запустил, а не перезагружал.Это сработало.

0 голосов
/ 01 июля 2012

РЕШЕНИЕ: Я должен был рассмотреть, какие классы должны быть сериализуемыми, а какие нет.

...