我在我的应用程序中配置了一个过滤器,用于拦截所有请求,并且需要设置名为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"));
....
}
答案 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)
您可以使用
访问您的beanUserInfoBean userInfo = (UserInfoBean) request.getSession().getAttribute("userInfoBean");
但是之前必须在会话中创建bean。因此,如果Filter应该进行一些身份验证,那么检查bean是否为null或者用户名是否错误,那么你就知道你已经有了非主动用户。