JSTL c:forEach使用Mojarra 2.1.18+导致CDI(Seam 3)@ViewScoped bean在每个AJAX请求上调用@PostConstruct

时间:2014-02-20 16:02:06

标签: jsf-2 jstl cdi view-scope seam3

对于stackoverflow.com上的一些问题,这是一个后续问题:

JSTL c:forEach causes @ViewScoped bean to invoke @PostConstruct on every request

Why does @PostConstruct callback fire every time even though bean is @ViewScoped? JSF

但是,我们使用的是Mojarra 2.1.22,但是我们的Seam 3 CDI @ViewScoped注释bean总是被重建,这是用@PostConstruct注释的方法被执行,我们每个都得到一个新的bean AJAX请求。

我持续听了几个月(现在是2014年2月)是Mojarra 2.1.18+修复了很多这些错误,当视图使用这个bean时,视图范围的bean应该能够在AJAX请求中存活下来<c:forEach items="#{mySeam3CdiViewScopedBean.items}" ... >

以下是一些错误:

https://java.net/jira/browse/JAVASERVERFACES-1665

https://java.net/jira/browse/JAVASERVERFACES_SPEC_PUBLIC-928&lt; - 请参阅dwightd的最后评论 - 我无法确认!

https://java.net/jira/browse/JAVASERVERFACES_SPEC_PUBLIC-787

https://java.net/jira/browse/JAVASERVERFACES-2688

我在顶部提到的示例的唯一区别是我们正在使用 Seam 3.1 Faces CDI @ViewScoped(+ @Named)而非“本机”JSF @ViewScoped(+ @ManagedBean)。

问题

Seam 3 Faces(3.1 Final)之所以无法正常工作吗?

(我们如何才能找到?将我们所拥有的内容翻译成测试用例并不容易......也许有人知道?)


PS:我知道这更像是一个论坛问题,但我希望这里的人们能够处理JSF 2但不一定是Seam 3(Faces),可以提供反馈。

1 个答案:

答案 0 :(得分:2)

关于你的问题的一些评论:

  • 建议不要在JSF中使用JSTL循环,因为它不是在JSF生命周期中管理的。使用facelets ui:repeat是一种很好的做法
  • Seam 3已被弃用,您应该避免使用它,因为如果问题来自此处您将无法获得任何支持。

您有两种解决方案(按优先顺序排列):

但在这两种情况下,尝试摆脱JSF页面中的JSTL,它是许多奇怪问题的根源。