我正在尝试将我的应用程序与JPS中的以下代码一起使用
getText
在wilfly 10内。一切正常,但是当我打开包含上面代码的视图时,在日志中看到以下错误:
<c:forEach var="area" items="#{MissingSearchBean.workingAreas}">
<h:commandButton value="#{area.workingAreaName}(#{area.count})"
action="#{MissingSearchBean.selectWorkingArea(area.workingAreaName)}"
styleClass="commandButton" />
</c:forEach>
我认为wildfly会尝试将视图持久保存到infinispan中,以便在我重新加载页面或在另一个节点上访问此页面时能够恢复视图。
我尝试将bean的范围更改为Caused by: org.infinispan.commons.marshall.NotSerializableException: javax.servlet.jsp.jstl.core.IteratedExpression
Caused by: an exception which occurred:
in field iteratedExpression
in field delegate
in field savedState
in field m
in object java.util.HashMap@85e645ff
in object org.wildfly.clustering.marshalling.jboss.SimpleMarshalledValue@85e645ff
甚至更改为request
,但是wildfly仍尝试对视图进行序列化。我绝对确定问题出在none
中,因为当我将其注释(或内容)排除在外时,我不会遇到任何例外。
显然,c:forEach
的内部包含Iterator,但事实并非如此IteratedExpression
。
我正在寻找任何解决方案/变通办法,以使其能够在群集中工作而不会引发异常。
答案 0 :(得分:1)
问题是c:forEach
创建了IteratedValueExpression
,而不是Serializable
,因为其中包含Iterator
。一个简单的解决方法是将MissingSearchBean.workingAreas
的返回类型更改为数组。
如果value
由数组表示,则LoopTagSupport
会创建IndexedValueExpression
而不是IteratedValueExpression
,并且显式地是Serializable
。