0

この質問で述べられている問題の理由を見つけるための私の試みでは、JSF2のページの読み込みが遅いので、使用するユーザーセッションフィルターの時間を計りたいと思います。ApplicationScopedBeanであるタイマーを作成しました。

私の質問は、このBeanにフィルターから管理プロパティとしてアクセスできるかどうかです。他のBeanではこれを行うことができますが、フィルターでは管理プロパティは常にnullです。

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 が の場合は、次のよう@SessionScopedに取得できますSessionMap

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

ここでは、管理されていない Bean から Bean にアクセスする方法についての素晴らしいチュートリアルがあります。

イベント リスナーからマネージド Bean にアクセスする – JSF

于 2012-11-28T10:04:07.827 に答える