使用Servlet API设置SessionScoped ManagedBean

时间:2013-01-17 09:48:51

标签: session jsf-2 servlet-filters managed-bean

我在我的应用程序中配置了一个过滤器,用于拦截所有请求,并且需要设置名为UserInfoBean的某个bean userInfo的值,该值定义为ManagedBean并且那是SessionScoped

当我尝试创建UserInfoBean的实例并将其设置为名为userInfo的会话并尝试在#{userInfo.firstName}之类的JSF页面上访问它时,{{1}返回值。我的做法有什么问题?

bean类是:

null

过滤器代码为:

@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;
    }

}

JSF代码是:

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

2 个答案:

答案 0 :(得分:1)

删除

@ManagedBean (name="userInfo")
@SessionScoped

来自班级。您自己通过servlet过滤器而不是JSF来管理bean。

session.setAttribute("userInfo", new UserInfoBean("Joe"));已经#{userInfo}提供了@ManagedProperty("#{userInfo}")。 JSF不需要创建/覆盖它。

请注意,{{1}}仍将继续有效;它不需要目标对象是一个JSF托管bean,只是它可以通过指定的EL表达式“通常的方式”使用。

答案 1 :(得分:0)

您可以使用

访问您的bean
UserInfoBean userInfo = (UserInfoBean) request.getSession().getAttribute("userInfoBean");

但是之前必须在会话中创建bean。因此,如果Filter应该进行一些身份验证,那么检查bean是否为null或者用户名是否错误,那么你就知道你已经有了非主动用户。