0

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

我的问题是是否可以从过滤器中将此 bean 作为托管属性访问。在我的其他 bean 中,我可以做到这一点,尽管在过滤器中托管属性始终为空。

4

1 回答 1

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 { }

并在您的会话范围 bean 中像这样访问它

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

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

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

如果您要访问的 bean 是 a ,您可以像这样@SessionScoped获取它SessionMap

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

在这里,您获得了有关如何从非托管 bean 访问 bean 的一些不错的教程

从事件侦听器访问托管 Bean – JSF

于 2012-11-28T10:04:07.827 回答