java.io.NotSerializableException — org.omnifaces.taghandler.Converter

У меня есть приложение, использующее Primefaces 3.5 с Omnifaces 1.5 на Jboss 6, использующее myfaces 2.1.5

при попытке использовать o:converter я получаю следующую ошибку.

org.omnifaces.taghandler.Converter

viewId=/xhtml/propelModules/initiatePropel.xhtml
location=C:\jboss-6.1.0.Final\server\default\deploy\PropelEAR.ear\PropelWeb.war\xhtml\propelModules\initiatePropel.xhtml
phaseId=RENDER_RESPONSE(6)

Caused by:
java.io.NotSerializableException - org.omnifaces.taghandler.Converter
at java.io.ObjectOutputStream.writeObject0(Unknown Source)

Соответствующий код...

<p:selectManyCheckbox value="#{initiatePropelManagedBean.currentWon.selectedEmployeeList}" 
  layout="pageDirection">
<o:converter converterId="omnifaces.ListIndexConverter" 
      list="#{initiatePropelManagedBean.currentWon.employeeList}" />
     <f:selectItems value="#{initiatePropelManagedBean.currentWon.employeeList}"
       var="emp" itemLabel="#{emp}" itemValue="#{emp}" />
     <p:ajax process="@this" update="employeeCount"></p:ajax>
</p:selectManyCheckbox>

person Sujoy    schedule 10.09.2013    source источник
comment
Вы используете сохранение состояния на стороне клиента?   -  person rdcrng    schedule 10.09.2013
comment
Да. Это забота?   -  person Sujoy    schedule 10.09.2013
comment
Нет, мне просто интересно, как вы это обнаружили, потому что единственным другим способом было бы дождаться сериализации сеанса. Я не уверен, но на самом деле это может быть оплошность Omnifaces. Я уверен, что BalusC посмотрит на это достаточно скоро :)   -  person rdcrng    schedule 10.09.2013


Ответы (1)


Я могу воспроизвести вашу проблему. Это ошибка в MyFaces 2.1.5. Я не могу найти соответствующий отчет об ошибке и версию исправления, но я могу, по крайней мере, сказать, что эта конструкция отлично работает для меня с последней последней версией MyFaces 2.1.12. Таким образом, обновление MyFaces должно сделать это и для вас.


Не связанная с конкретной проблемой стратегия конверсии здесь несколько странная. Простого использования omnifaces.SelectItemsConverter или omnifaces.SelectItemsIndexConverter (если у вас нет хорошего equals() на объекте Employee) должно быть достаточно.

<p:selectManyCheckbox ... converter="omnifaces.SelectItemsIndexConverter">
    <f:selectItems value="#{initiatePropelManagedBean.currentWon.employeeList}" />
</p:selectManyCheckbox>

SelectItems(Index)Converter строго не требует List<SelectItem> как модель, он требует только <f:selectItem(s)> в представлении. List(Index)Converter предназначен для компонентов, которые не используют <f:selectItem(s)>, таких как <p:autoComplete>, <p:picklist> и т. д.

Это было бы альтернативным решением, если вы по какой-то причине не можете обновить MyFaces.

person BalusC    schedule 10.09.2013
comment
Спасибо. Конвертер SelectItems(Index) тоже отлично работал. Не удалось попробовать с myfaces 2.1.12, так как загрузка заблокирована на работе :( - person Sujoy; 10.09.2013
comment
Та же проблема с MyFaces 2.3.4. Я проверил примечания к выпуску для более новых версий, и там нет упоминания об исправлении этой проблемы. Есть идеи, как исправить это @BalusC? - person Christian Beikov; 08.09.2020