我在应用程序范围的 bean 中有一个变量。用户可以通过方法调用触发此变量的更新。现在的问题是用户在刷新 jsf 页面后没有得到这个变量的更新视图。如果已经测试了变量是否正确更新并且是正确的,那么更新方法工作正常。应用程序范围 bean 中的变量是否声明为 final 或者这里有什么问题?
问问题
783 次
1 回答
0
如果您使用了错误的注释组合,就会发生这种情况。例如
import javax.enterprise.context.ApplicationScoped;
import javax.faces.bean.ManagedBean;
@ManagedBean
@ApplicationScoped
public class App {}
这里,范围注释来自 CDI,bean 管理注释来自 JSF。JSF 不识别 CDI 范围注释,因此默认为@NoneScoped
. 即,在每一次 EL#{app}
评估上都会重建 bean。这解释了您所看到的症状。
您还需要将范围注释修复为来自 JSF。
import javax.faces.bean.ApplicationScoped;
import javax.faces.bean.ManagedBean;
@ManagedBean
@ApplicationScoped
public class App {}
CDI 范围注释只能与 CDI bean 管理注释结合使用@Named
。
于 2012-10-25T16:01:34.467 回答