0

すべてのリクエストをインターセプトするアプリケーションで構成されたフィルターがあり、 aおよびis として定義されている asUserInfoBeanという名前の特定の Bean の値を設定する必要があります。userInfoManagedBeanSessionScoped

のインスタンスを作成しUserInfoBeanて名前付きのセッションに設定し、のuserInfoような JSF ページでアクセスしようとすると#{userInfo.firstName}null値が返されます。私のアプローチで何が間違っていますか?

Bean クラスは次のとおりです。

@ManagedBean (name="userInfo")
@SessionScoped
public class UserInfoBean {
    private String firstName;

    public String getFirstName() {
        return firstName;
    }
    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }
    public UserInfoBean(String firstName) {
        this.firstName = firstName;
    }

}

フィルタ コードは次のとおりです。

public void doFilter(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException {
    ....
    HttpSession session = request.getSession();
    session.setAttribute("userInfo", new UserInfoBean("Joe"));
    ....
}

JSF コードは次のとおりです。

<h:outputText value="#{userInfo.firstName}" />
4

2 に答える 2

1

削除する

@ManagedBean (name="userInfo")
@SessionScoped

クラスから。JSF ではなく、サーブレット フィルターによって自分で Bean を管理しています。

では、session.setAttribute("userInfo", new UserInfoBean("Joe"));までにすでに利用可能になります#{userInfo}。JSF はそれを作成/オーバーライドする必要はありません。

@ManagedProperty("#{userInfo}")引き続き機能することに注意してください。ターゲット オブジェクトが JSF マネージド Bean である必要はありませんが、指定された EL 式で「通常の方法」で使用できることだけが必要です。

于 2013-01-17T15:20:27.150 に答える
0

でBeanにアクセスできます

UserInfoBean userInfo = (UserInfoBean) request.getSession().getAttribute("userInfoBean");

ただし、Bean はその前のセッションで既に作成されている必要があります。したがって、フィルターが何らかの認証を行う必要がある場合は、Bean が null であるか、ユーザー名が間違っているかを確認してください。未承認のユーザーがいることがわかります。

于 2013-01-17T09:56:41.330 に答える