Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JSF-在静态上下文中调用FacesContext.getCurrentInstance()_Java_Jsf_Static - Fatal编程技术网

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
相关错误的攻击


无论你想做什么,可能都有更好的方法。

绝对不是个好主意。这里的根本问题是什么?也许我们可以提供一个更好的解决方案。我不确定——这不是我的代码!我已经被分配到该项目后,很多东西都建成,现在我正在修复缺陷等。如果我有时间,我会研究一下,并返回给你。干杯