我有一个在Jboss 6上使用Primefaces 3.5和Omnifaces 1.5的应用程序,使用myfaces 2.1.5
在尝试使用该o:converter
时,我收到以下错误。
org.omnifaces.taghandler.Converter
viewId=/xhtml/propelModules/initiatePropel.xhtml
location=C:jboss-6.1.0.FinalserverdefaultdeployPropelEAR.earPropelWeb.warxhtmlpropelModulesinitiatePropel.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>
我可以重现你的问题。这是MyFaces 2.1.5中的一个错误。我找不到相关的错误报告和修复版本,但我至少可以说这个结构在当前最新的 MyFaces 2.1.12 上对我来说效果很好。因此,升级MyFaces也应该为您完成。
与具体问题无关,转换策略在这里有些奇怪。只需使用 omnifaces.SelectItemsConverter
或 omnifaces.SelectItemsIndexConverter
(如果您对Employee
实体没有良好的equals()
)就足够了。
<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,这将是替代解决方案。