0

我在我的应用程序中配置了一个过滤器,它拦截所有请求,它需要为某个UserInfoBean名为 as的 bean 设置值,该 beanuserInfo定义为 a ManagedBean,即SessionScoped.

当我尝试创建 的实例UserInfoBean并将其设置为具有名称的会话userInfo并尝试在 JSF 页面上访问它时#{userInfo.firstName},将返回一个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;
    }

}

过滤器代码为:

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

从课堂上。您自己通过 servlet 过滤器而不是 JSF 管理 bean。

session.setAttribute("userInfo", new UserInfoBean("Joe"));已经使其可用#{userInfo}。JSF 不需要创建/覆盖它。

请注意,它@ManagedProperty("#{userInfo}")仍将继续工作;它不要求目标对象是 JSF 托管 bean,而只是它可以通过指定的 EL 表达式“通常方式”获得。

于 2013-01-17T15:20:27.150 回答
0

您可以使用

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

但是 bean 必须在此之前已经在会话中创建。因此,如果过滤器应该进行一些身份验证,然后检查 bean 是否为空或用户名错误,那么您就知道您有未经授权的用户。

于 2013-01-17T09:56:41.330 回答