我在应用程序范围内的bean中有一个变量。用户可以通过方法调用触发此变量的更新。现在问题是刷新jsf页面后用户没有获得此变量的更新视图。如果已测试变量是否正确更新,那么更新方法正常工作。应用程序作用域bean中的变量是否被声明为final或这里有什么问题?
答案 0 :(得分:0)
如果使用了错误的注释组合,就会发生这种情况。 E.g。
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
结合使用。