我刚开始学习JSF。
在使用示例时,我觉得需要访问 MyBean 类中的 ServletContext 对象。我想使用我使用 Listener 放入 ServletContext 中的对象。我可以这样做吗?ServletContext 在 Beans 中是否也有其范围?
它只是可用的ExternalContext#getContext()
。另请参阅它的 javadoc:
获取上下文
public abstract java.lang.Object getContext()
返回当前应用程序的应用程序环境对象实例。
在应用程序启动或关闭期间调用该方法有效。如果在应用程序启动或关闭期间调用,这将返回与在实际请求期间调用返回的容器上下文实例(或)相同的容器上下文实例(或)
ServletContext
。PortletContext
getContext()
ExternalContext
FacesContext
Servlet:这必须是当前应用程序的
javax.servlet.ServletContext
实例。
所以,这应该这样做:
public void someMethod() {
ServletContext servletContext = (ServletContext) FacesContext
.getCurrentInstance().getExternalContext().getContext();
// ...
}
与具体问题无关,根据具体的功能要求,这可能不是具体问题的正确解决方案。普遍的共识是您的 JSF 代码应该尽可能地没有任何javax.servlet.*
依赖项/导入。您的问题并不完全清楚,但如果您确实打算访问您放在 servlet 上下文中的属性,那么只需从中获取它ExternalContext#getApplicationMap()
。
例如在ServletContextListener
:
event.getServletContext().setAttribute("foo", foo);
然后在 JSF
Foo foo = (Foo) FacesContext.getCurrentInstance().getExternalContext()
.getApplicationMap().get("foo");
甚至只是通过@ManagedProperty
@ManagedProperty("#{foo}")
private Foo foo; // +setter