Jsf 2 JSTL c:forEach使用Mojarra 2.1.18+使CDI(Seam 3)@ViewScope bean在每个AJAX请求上调用@PostConstruct;

Jsf 2 JSTL c:forEach使用Mojarra 2.1.18+使CDI(Seam 3)@ViewScope bean在每个AJAX请求上调用@PostConstruct;,jsf-2,jstl,cdi,view-scope,seam3,Jsf 2,Jstl,Cdi,View Scope,Seam3,这是stackoverflow.com上一些问题的后续问题: 然而,我们使用的是Mojarra 2.1.22,但是我们的Seam 3 CDI@ViewScoped带注释的bean总是被重构,也就是说,使用@PostConstruct注释的方法被执行,我们在每个AJAX请求上都会得到一个新bean 几个月以来(现在是2014年2月),我一直听到Mojarra 2.1.18+已经修复了许多这样的bug,并且当视图从使用这个bean时,视图范围的bean应该能够经受住AJAX请求 以下是一些错误:

这是stackoverflow.com上一些问题的后续问题:

然而,我们使用的是Mojarra 2.1.22,但是我们的Seam 3 CDI
@ViewScoped
带注释的bean总是被重构,也就是说,使用
@PostConstruct
注释的方法被执行,我们在每个AJAX请求上都会得到一个新bean

几个月以来(现在是2014年2月),我一直听到Mojarra 2.1.18+已经修复了许多这样的bug,并且当视图从
使用这个bean时,视图范围的bean应该能够经受住AJAX请求

以下是一些错误:


关于你的问题,我想说几句话:

  • 不建议在JSF中使用JSTL循环,因为它在JSF生命周期中不受管理
  • Seam 3已被弃用,您应该避免使用它,因为如果问题来自这里,您将没有任何支持
您有两种解决方案(按优先顺序):

  • 切换到JSF 2.2x(和CDI 1.1),它集成了与本机CDI兼容的
    @ViewScoped
    。您可以通过使用或服务器轻松做到这一点
  • 如果无法切换JSF,请忘记Seam Faces并切换到Deltaspike(Seam 3和CODI的后代)

但在这两种情况下,请尝试在您的JSF页面中删除JSTL,这是许多奇怪问题的根源。

您使用的是Mojarra 2.1.18。这仅在JSF 2.2(Mojarra 2.2)中得到修复。该错误将出现在您的构建中。我们使用的是Mojarra 2.1.22,如上所述。-)使用´´无法解决当前问题。菜单项列表中未呈现任何内容(使用PrimeFaces)。所以我们有点被´´卡住了,或者我们不得不使用一些可怕的黑客。Primefaces在
ui:repeat
发生之前构建其组件,所以使用它是没有意义的。但是,提醒您始终可以选择将组件绑定到托管bean,而不是使用for each。这样,您就可以在Java端处理组件,然后再将其显示在视图上。使用组件绑定对
@ViewScoped
bean有一定的影响:请参阅,以了解更著名的错误。