Servlets Java在ManagedBean类中面向ServletContext对象
我刚开始学习JSF 在处理一个示例时,我觉得需要访问MyBean类中的ServletContext对象。我想使用一个对象,这个对象是我使用Listener放在ServletContext中的。我可以这样做吗?ServletContext在bean中也有它的作用域吗?它只由用户提供。另见: getContextServlets Java在ManagedBean类中面向ServletContext对象,servlets,jsf-2,Servlets,Jsf 2,我刚开始学习JSF 在处理一个示例时,我觉得需要访问MyBean类中的ServletContext对象。我想使用一个对象,这个对象是我使用Listener放在ServletContext中的。我可以这样做吗?ServletContext在bean中也有它的作用域吗?它只由用户提供。另见: getContext public abstract java.lang.Object getContext() 返回当前应用程序的应用程序环境对象实例 在应用程序启动或关闭期间调用此方法是有效的。如果在应用程
public abstract java.lang.Object getContext()
返回当前应用程序的应用程序环境对象实例
在应用程序启动或关闭期间调用此方法是有效的。如果在应用程序启动或关闭期间调用,则返回的容器上下文实例(ServletContext
或PortletContext
)与在实际请求期间对FacesContext
返回的ExternalContext
调用getContext()
时返回的容器上下文实例相同
Servlet:这必须是当前应用程序的javax.Servlet.ServletContext
实例
因此,这应该做到:
public void someMethod() {
ServletContext servletContext = (ServletContext) FacesContext
.getCurrentInstance().getExternalContext().getContext();
// ...
}
与具体问题无关根据具体功能需求,这可能不是具体问题的正确解决方案。普遍的共识是,JSF代码应该尽可能不包含任何
javax.servlet.*
依赖项/导入。您的问题并不十分清楚,但是如果您确实想要访问您放在servlet上下文中的属性,那么只需从中获取它即可
例如,在ServletContextListener
中:
event.getServletContext().setAttribute("foo", foo);
然后在JSF中
Foo foo = (Foo) FacesContext.getCurrentInstance().getExternalContext()
.getApplicationMap().get("foo");
甚至仅仅通过@ManagedProperty
@ManagedProperty("#{foo}")
private Foo foo; // +setter
具体的问题是,我正在实例化一个数据库连接,并将该连接对象存储在Context param中,以便所有servlet都可以使用它。看到您的答案,我想ExternalContext类将在JSF中完成这项工作。我看完文件后再查。谢谢:)不客气。老实说,这是一种“eeek”。这样,您的应用程序将在运行约8小时后死亡,具体取决于数据库服务器端连接超时设置。您应该在尽可能短的范围内打开和关闭数据库资源。除其他外,见。然而,对于JavaEEWeb应用程序,我会在一个无状态的EJB中使用JPA
@EntityManager
。这可以通过@EJB
在JSF管理的bean和servlet中注入。