この質問で述べられている問題の理由を見つけるための私の試みでは、JSF2のページの読み込みが遅いので、使用するユーザーセッションフィルターの時間を計りたいと思います。ApplicationScopedBeanであるタイマーを作成しました。
私の質問は、このBeanにフィルターから管理プロパティとしてアクセスできるかどうかです。他のBeanではこれを行うことができますが、フィルターでは管理プロパティは常にnullです。
この質問で述べられている問題の理由を見つけるための私の試みでは、JSF2のページの読み込みが遅いので、使用するユーザーセッションフィルターの時間を計りたいと思います。ApplicationScopedBeanであるタイマーを作成しました。
私の質問は、このBeanにフィルターから管理プロパティとしてアクセスできるかどうかです。他のBeanではこれを行うことができますが、フィルターでは管理プロパティは常にnullです。
更新された回答:
次の方法で、フィルターからアプリケーション スコープ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 が の場合は、次のよう@SessionScoped
に取得できますSessionMap
MyAppBean myAppBean = (MyAppBean ) FacesContext.getCurrentInstance().
getExternalContext().getSessionMap().get("country");
ここでは、管理されていない Bean から Bean にアクセスする方法についての素晴らしいチュートリアルがあります。