wildfly - 集群中的 Wildfly 10 尝试使用 org.infinispan.commons.marshall.NotSerializableException 序列化 JSP
问题描述
我正在尝试将我的应用程序与 JPS 中的以下代码一起使用
<c:forEach var="area" items="#{MissingSearchBean.workingAreas}">
<h:commandButton value="#{area.workingAreaName}(#{area.count})"
action="#{MissingSearchBean.selectWorkingArea(area.workingAreaName)}"
styleClass="commandButton" />
</c:forEach>
在 wifly 10 里面。一切正常,但是当我打开视图时,包含上面的代码,我在日志中看到以下错误:
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
我认为 wildfly 会尝试将视图持久化到 infinispan 以便能够恢复视图,以防我重新加载页面或在另一个节点上点击此页面。
我试图将 bean 的范围更改为request
甚至更改为none
,但 wildfly 仍然尝试序列化视图。我绝对确定问题出在了,c:forEach
因为当我将其(以及它的内容)注释掉时——我没有得到任何例外。
里面也明显IteratedExpression
包含Iterator,这是不Serializable
正确的。
我正在寻找任何解决方案/解决方法,以便能够在集群中工作而不会引发异常。
解决方案
问题是c:forEach
创建IteratedValueExpression
,这不是Serializable
因为包含Iterator
内部。简单的解决方法是将返回类型更改MissingSearchBean.workingAreas
为数组。
如果 whenvalue
由数组表示,则LoopTagSupport
创建IndexedValueExpression
而不是IteratedValueExpression
并且 this 是显式的Serializable
。
推荐阅读
- r - 麻烦子设置data.frame/对因素错误没有意义
- excel - 在用户窗体中使用图表图像而不保存到磁盘
- javascript - 带有两个事务的 IndexedDB:1 个读取然后 1 个更新
- typescript - 你会称这种 TypeScript 不能做的推理是什么?
- java - 无法使用 Build > Build Project 在 Intellij 中构建项目
- python - 使用 (py)OpenGL 处理纹理和图像
- facebook-graph-api - 图形 API 错误 #200 即使具有正确的权限
- jquery - jQuery 对象中的空白命名属性
- java - 如何更改数字长度格式?
- c# - 将一个数字的符号赋予另一个数字?