2012-01-12 189 views
2

我正在使用JSF和PrimeFaces開發應用程序。 我有一個託管的,會話範圍,有用戶名,密碼和isUserLoggedIn。 當我處理登錄組件時,它會起作用並相應地更改我的頁面。只要移動到另一頁,我就會丟失用戶名數據。我需要在整個應用程序中訪問用戶名。 有誰知道我爲什麼會丟失應該會話範圍的數據?爲什麼我要保留它從一頁而不是其他的? 由於JSF PrimeFaces丟失數據和會話

import authentication.AuthenticatorManagerLocal; 
import javax.ejb.EJB; 
import javax.enterprise.context.SessionScoped; 
import javax.faces.bean.ApplicationScoped; 
import javax.faces.bean.ManagedBean; 
import javax.faces.bean.RequestScoped; 

@ManagedBean 
@SessionScoped 
public class UserMB { 
    @EJB 
    private AuthenticatorManagerLocal authenticatorManager; 

    /** Creates a new instance of UserMB */ 
    public UserMB() { 
    } 

    Boolean isUserLoggedIn; 
    String username; 
    String password; 
    String nickName; 

    public String getNickName() { 
     nickName="vanessa"; 
     return nickName; 
    } 

    public void setNickName(String nickName) { 
     this.nickName = nickName; 
    } 

    public Boolean getIsUserLoggedIn() { 
     return isUserLoggedIn; 
    } 

    public void setIsUserLoggedIn(Boolean isUserLoggedIn) { 
     this.isUserLoggedIn = isUserLoggedIn; 
    } 

    public String getPassword() { 
     return password; 
    } 

    public void setPassword(String password) { 
     this.password = password; 
    } 

    public String getUsername() { 
     return username; 
    } 

    public void setUsername(String username) { 
     this.username = username; 
    } 

    public String authenticateUser(){ 
     isUserLoggedIn= authenticatorManager.authenticateUser(username, password); 
     if(isUserLoggedIn)return "Home"; 
     else 
      return null; 
    } 

    public void logout(){ 
     isUserLoggedIn=false; 
     username=""; 
     password=""; 
    } 

    public String goToIndex(){ 
     return "Index"; 
    } 

} 

HOME具有

<p:commandButton value="SearchCB" action="#{expSearchResultsMB.search()}" ajax="false" /> 

的定製組件

expSearchResultsMB.search()發送到SearchResult所 其中我想顯示的用戶名

<h:outputLabel value="#{userMB.username}" /> 

我內部需要訪問用戶名和isU SerLoggedin在應用程序的每個頁面中。 當我檢查用戶是否登錄時,如果他是我會啓動Home。 首頁正確顯示用戶名,但是當我在家中使用searchCB時,登陸SearchResults頁面不顯示用戶名。

任何人都可以幫忙嗎?

+0

顯然這個bean不是會話作用域,或者數據存儲不正確,或者會話維護不正確。如果沒有看到我們需要的最小代碼來重現您所面臨的問題,就很難找出真正的原因。提到確切的JSF impl/version和PrimeFaces版本也會有所幫助。 – BalusC 2012-01-12 12:19:51

+0

我正在使用JSF 2和Primefaces 3.我需要訪問的bean是Session作用域。請讓我知道你是否需要其他細節。謝謝 – Viola 2012-01-12 12:23:36

+0

代碼足以查看真實原因。但我更多的要求像「Mojarra 2.1.4」和「PrimeFaces 3.0 Final」這樣的確切的impl /版本。 – BalusC 2012-01-12 12:28:06

回答

3
import javax.enterprise.context.SessionScoped; 

您已導入會話作用域的錯誤註釋。如果您使用的是JSF @ManagedBean,那麼您需要從javax.faces.bean軟件包導入示波器。以上僅適用於CDI @Named

所以,相應的修復:

import javax.faces.bean.SessionScoped; 

一個@ManagedBean沒有合適的範圍將表現爲@NoneScoped。即每個EL評估都會創建一個新實例,這正是您所看到的有問題的行爲。

+0

非常感謝。它完美的作品。 – Viola 2012-01-12 12:42:25

+0

再次感謝。我一定會。 – Viola 2012-01-12 12:58:47