- - PR -
FilterよりJSFのmanaged-beanのプロパティにアクセスしたい
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-07-29 20:28
こんにちは
JSFの勉強中のつちつちと申します。 FilterよりJSFのmanaged-beanのプロパティにアクセスしたいと思うのですが、 以下の行でエラーが出ます。 FacesContext ctx = FacesContext.getCurrentInstance(); LoginBean mlb = (LoginBean)ctx.getApplication().getVariableResolver().resolveVariable(ctx, "LoginBean"); ※エラー内容 java.lang.NullPointerException tsuchi.filter.imgman01.LoginFilter.doFilter(LoginFilter.java:34) org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:81) JSFのライフサイクルの関係で、Filterからはプロパティにアクセスできないのでしょうか? どなたかご教授お願いします。 なにがやりたいかというと、セッション管理をFilterで行ないたいのですが、セッションの有効/無効をmanaged-beanのプロパティに持たせ、Filterを通過するたびに、それをチェックしたいと思っています。。。 よろしくお願いします。 | ||||
|
投稿日時: 2006-07-30 01:39
>JSFのライフサイクルの関係で、Filterからはプロパティにアクセスできないのでしょうか?
そういうことです。Filterは、ServletやJSPがリクエストを処理する前に 実行されるので、FacesServletがリクエストの処理を行っていないということは、 FacesContextのインスタンスも生成されていません。 FacesContext ctx = FacesContext.getCurrentInstance(); この時点で、ctxにはnullが入ってくるはずです。 | ||||
|
投稿日時: 2006-07-30 01:46
FacesContext.getCurrentInstance()が返すコンテキストは、FacesServletが ThreadLocalに構成するので、FacesServletより前に実行されるFilterからでは 使うことはできません。 普通にServletRequestを使ってmanaged-beanにアクセスしましょう。 インスタンスの生成も必要なのであれば、自分でnewする必要があります。 これはmanaged-beanの生成がJSF ELの評価中に行われるからです。 | ||||
|
投稿日時: 2006-07-31 09:10
こんにちは
T2さん、あしゅさん、アドバイスありがとうございました。 FilterからのManaged-beanプロパティへのアクセスはあきらめたいと思います。 ありがとうございました。 | ||||
|
投稿日時: 2006-07-31 09:15
マネージドビーンをセッションスコープに指定して、下記のように普通に取り出せませんか?
managedBean = (ManagedBean)session.getAttribute(MANAGED_BEAN_NAME); | ||||
|
投稿日時: 2006-07-31 17:06
マネージドビーンのなまえがhogeで
スコープがセッションの場合 HogeBean hogeBean = (HogeBean) session.getAttribute("hoge"); とか どうでしょうか | ||||
|
投稿日時: 2006-08-01 13:08
chaguma様、TAKEZO様
コメントありがとうございます。 確認してみようと思うのですが、1点分からないところがあります。 session.getAttribute("hoge"); の部分がありますが、「session」はどのように定義したらよいのでしょうか? HttpSession session = (HttpSession)???; ???の部分を何らかの形にするのでしょうか? 何度も申し訳有りませんが、アドバイスをお願いいたします。 | ||||
|
投稿日時: 2006-08-01 13:29
FilterのdoFilterメソッド内で下記のように記述すれば取れると思います。
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { HttpSession session; HttpServletRequest sreq; sreq = (HttpServletRequest)req; session = sreq.getSession(); 以下略 |