facelets.viewhandler Ошибка отображения при просмотре NotSerializableException: eu.jakubiak.jpa.translator.Translator$TranslatorProxyMethodInterceptor

Я работаю над исправлением ошибки в ранее существующем приложении, используя:

  • Java 6
  • JBoss 4.2.3 GA
  • JBoss Seam 2.2.0 GA
  • JSF2

Приложение использует эту библиотеку для перевода

http://code.google.com/p/jpa-translator/

http://code.google.com/p/support/wiki/WikiSyntax

Вы знакомы с этой ошибкой при попытке опубликовать свойство объекта EJB в представлении JSF?

ERROR [facelets.viewhandler] (http-...) Error Rendering View[/public/answer.xhtml]
java.io.NotSerializableException: eu.jakubiak.jpa.translator.Translator$TranslatorProxyMethodInterceptor

Я мой код имел это

<c:forEach var="_d" items="#{indicatorValuesDimension}">
<s:div styleClass="answer-dimension">#{_d.key.name}</s:div>

Где индикатор ValuesDimension - это java.util.Map, ключ - это объектный компонент @Transhable, а name - свойство @Translate String.

Но если я делаю это вместо этого, он работает просто отлично...

 <c:forEach var="_d" items="#{indicatorValuesDimension}">
 #{_d.key.name}

Таким образом, то же выражение отлично работает вне любого тега JSF, но выдает исключение NotSerializableException при использовании внутри тега JSF.

Кто-нибудь сталкивался с этим раньше? Есть указатели?

1 ответ

Решение

Решено переключением на

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

в моем web.xml. С помощью

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

был причиной проблемы, потому что многие классы в библиотеке (BeanReflector?, TranslatorProxyMethodInterceptor? и т. д.) не реализуют java.io.Serializable.

Другие вопросы по тегам