2013-01-17 64 views
0

SessionScoped ManagedBean我在我的應用程序中配置一個過濾器,攔截所有的請求,它需要設定值命名爲userInfo某個bean UserInfoBean其被定義爲ManagedBean,這是SessionScoped設置使用Servlet API的

當我試圖創建的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}" /> 

回答

0

您可以

UserInfoBean userInfo = (UserInfoBean) request.getSession().getAttribute("userInfoBean"); 
訪問你的bean

但是在此之前,bean必須已經在會話中創建。所以如果Filter應該做一些驗證,那麼檢查這個bean是否爲空或用戶名是錯誤的,那麼你知道你有一個無法理解的用戶。

1

從類中刪除

@ManagedBean (name="userInfo") 
@SessionScoped 

。您通過servlet過濾器而不是JSF來管理bean。

session.setAttribute("userInfo", new UserInfoBean("Joe"));已經可以通過#{userInfo}。 JSF不需要創建/覆蓋它。

請注意,@ManagedProperty("#{userInfo}")仍然會繼續工作;它不要求目標對象成爲JSF託管bean,但只需通過指定的EL表達式「常用方式」即可使用它。