在我试图找出此问题中所述问题的原因:JSF2 slow page loading时,我想计算我使用的用户会话过滤器。我创建了一个ApplicationScoped bean的计时器。
我的问题是,是否可以从过滤器访问此bean作为托管属性。在我的其他bean中,我可以这样做,尽管在过滤器中托管属性总是为空。
答案 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的好教程