gpt4 book ai didi

servlets - ManagedBean 类中的 Java Faces ServletContext 对象

转载 作者:行者123 更新时间:2023-12-02 09:12:46 26 4
gpt4 key购买 nike

我刚刚开始学习 JSF。

在使用示例时,我觉得需要访问 MyBean 类中的 ServletContext 对象。我想使用一个通过 Listener 放入 ServletContext 中的对象。我可以这样做吗? ServletContext 在 Beans 中也有它的作用域吗?

最佳答案

可通过 ExternalContext#getContext() 获取。另请参阅its javadoc :

getContext

public abstract java.lang.Object getContext()

Return the application environment object instance for the current appication.

It is valid to call this method during application startup or shutdown. If called during application startup or shutdown, this returns the same container context instance (ServletContext or PortletContext) as the one returned when calling getContext() on the ExternalContext returned by the FacesContext during an actual request.

Servlet: This must be the current application's javax.servlet.ServletContext instance.

所以,应该这样做:

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

关于servlets - ManagedBean 类中的 Java Faces ServletContext 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14245657/

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