在我试图找出这个问题中所述问题的原因时:JSF2 slow page loading,我想为我使用的用户会话过滤器计时。我创建了一个计时器,它是一个 ApplicationScoped bean。
我的问题是是否可以从过滤器中将此 bean 作为托管属性访问。在我的其他 bean 中,我可以做到这一点,尽管在过滤器中托管属性始终为空。
在我试图找出这个问题中所述问题的原因时:JSF2 slow page loading,我想为我使用的用户会话过滤器计时。我创建了一个计时器,它是一个 ApplicationScoped bean。
我的问题是是否可以从过滤器中将此 bean 作为托管属性访问。在我的其他 bean 中,我可以做到这一点,尽管在过滤器中托管属性始终为空。
更新答案:
通过以下方式从过滤器访问您的应用程序范围的 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 的一些不错的教程