访问过滤器中的托管属性

时间:2012-11-28 09:56:55

标签: jsf-2 properties servlet-filters

在我试图找出此问题中所述问题的原因:JSF2 slow page loading时,我想计算我使用的用户会话过滤器。我创建了一个ApplicationScoped bean的计时器。

我的问题是,是否可以从过滤器访问此bean作为托管属性。在我的其他bean中,我可以这样做,尽管在过滤器中托管属性总是为空。

1 个答案:

答案 0 :(得分:3)

更新答案:

以下面的方式从过滤器访问应用程序作用域 bean

ServletContext context = req.getServletContext();
MyAppBean myAppBean = (MyAppBean) context.getAttribute("myAppBean");

以下列方式从过滤器访问会话作用域 bean

HttpSession session = ((HttpServletRequest) req).getSession(false);
MyAppBean myAppBean = (MyAppBean ) session.getAttribute("myAppBean");

原始答案:

是的,您可以将其设为(eager = true),然后添加所需的注释

@ManagedBean(eager = true)
@ApplicationScoped
public class MyAppBean { }

并在你的sesion scoped bean中像这样访问它

@ManagedProperty(value = "#{myAppBean }")
private MyAppBean myAppBean; //add getter and setter

如果你的bean不是@ManagedBean,你可以从ApplicationMap这样访问它

MyAppBean myAppBean = (MyAppBean ) FacesContext.getCurrentInstance().
    getExternalContext().getApplicationMap().get("country");

如果您要访问的bean是@SessionScoped,您可以从SessionMap这样抓取

MyAppBean myAppBean = (MyAppBean ) FacesContext.getCurrentInstance().
    getExternalContext().getSessionMap().get("country");

这里有一些关于如何从非托管bean访问bean的好教程

Access A Managed Bean From Event Listener – JSF