Java JSF-在静态上下文中调用FacesContext.getCurrentInstance()
我是否认为这可能不是最好的主意:Java JSF-在静态上下文中调用FacesContext.getCurrentInstance(),java,jsf,static,Java,Jsf,Static,我是否认为这可能不是最好的主意: private static Application app = FacesContext.getCurrentInstance() .getApplication(); 。。。或者在无法确定当前执行线程是否是由servlet请求引起时调用FacesContext.getCurrentInstance() 按照我的理解,FacesContext.getCurrentInstance()通过将当前faces上下文分配给线程(例如ThreadLoc
private static Application app = FacesContext.getCurrentInstance()
.getApplication();
。。。或者在无法确定当前执行线程是否是由servlet请求引起时调用FacesContext.getCurrentInstance()
按照我的理解,FacesContext.getCurrentInstance()通过将当前faces上下文分配给线程(例如ThreadLocal变量)来工作。上面提到的内容通常会在JSF支持bean或JSF组件类这样的类中工作,因为加载类并实例化类成员(静态变量)的执行线程通常是FacesServlet请求。但我仍然认为依靠它不是一个好主意
同意还是不同意?思想?谢谢。在初始化期间使用FacesContext.getCurrentInstance()可能是个好主意,也可能不是,这取决于上下文
不过,我无法想象将其分配给静态var会是一个好主意。这看起来不像是您真正想要做的事情 如果必须获取对应用程序的静态引用,则通过以下方式初始化它可能是更好的方法:
public final class CustomApplicationFactory extends ApplicationFactory {
private static volatile Application APPLICATION;
private final ApplicationFactory decorated;
public CustomApplicationFactory(ApplicationFactory decorated) {
this.decorated = decorated;
}
@Override public Application getApplication() {
APPLICATION = decorated.getApplication();
return APPLICATION;
}
@Override public void setApplication(Application application) {
APPLICATION = application;
decorated.setApplication(application);
}
public static Application getApp() {
return APPLICATION;
}
}
这将在您的faces config.xml
中注册。如果您不将此演示类与单个应用程序隔离,则它容易受到ClassLoader
相关错误的攻击
无论你想做什么,可能都有更好的方法。绝对不是个好主意。这里的根本问题是什么?也许我们可以提供一个更好的解决方案。我不确定——这不是我的代码!我已经被分配到该项目后,很多东西都建成,现在我正在修复缺陷等。如果我有时间,我会研究一下,并返回给你。干杯