gpt4 book ai didi

java - JSF - 在静态上下文中调用 FacesContext.getCurrentInstance()

转载 作者:行者123 更新时间:2023-11-30 01:39:17 25 4
gpt4 key购买 nike

我是否认为这可能不是最好的主意:

private static Application app = FacesContext.getCurrentInstance()
.getApplication();

...或者当您无法确定当前执行线程是由 servlet 请求引起时,对 FacesContext.getCurrentInstance() 的任何其他调用?

据我理解,FacesContext.getCurrentInstance() 的工作原理是将当前的面孔上下文分配给线程(例如 ThreadLocal 变量)。上面的内容可能通常在 JSF 支持 bean 或 JSF 组件类之类的类中工作,因为恰好加载类并实例化类成员(静态变量)的执行线程通常会是 FacesServlet 请求。但我仍然认为指望它不是一个好主意。

同意还是不同意?有想法吗?谢谢。

最佳答案

这看起来不像是您真正想做的事情。

如果您必须获取应用程序的静态引用,请通过 ApplicationFactory 对其进行初始化可能是更好的方法:

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 相关错误的影响。

可能有更好的方法来完成您想要做的事情。

关于java - JSF - 在静态上下文中调用 FacesContext.getCurrentInstance(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1494813/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com