2012-01-12 14 views
2

JSFとPrimeFacesでアプリケーションを開発しています。 私は、管理されたセッションスコープを持ち、ユーザー名、パスワード、isUserLoggedInを持っています。 ログインコンポーネントを処理すると、それは動作し、それに応じてページが変更されます。別のページに移動するとすぐに、ユーザー名データが失われます。アプリケーション全体でユーザー名にアクセスする必要があります。 誰かがなぜセッションをスコープする必要があるデータを失うのか知っていますか?なぜ私はそれを他のページではなく1つのページから保持するのですか? おかげ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は、カスタムコンポーネント

expSearchResultsMB.search(内

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

を持っているが)、私は、ユーザー名

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

を表示するにsearchResults に送信しますユーザー名とisUにアクセスする必要がありますSerLoggedinはアプリケーションのすべてのページにあります。 ユーザーがログインしているかどうかを確認すると、彼がいる場合はホームを起動します。 ホームにはユーザー名が正しく表示されますが、自宅からsearchCBを使用したときは、着陸したSearchResultsページにユーザー名が表示されません。

誰でも手助けできますか?

+0

Beanがセッションスコープでないか、データが正しく格納されていないか、セッションが正しく維持されていないようです。私たちが直面している問題を正確に再現するために必要な最小限のコードを見ずに、実際の原因を特定するのは難しいです。正確なJSF impl/versionとPrimeFacesのバージョンを挙げることも役立ちます。 – BalusC

+0

私はJSF 2とPrimeface 3を使用しています。私がアクセスする必要があるBeanはSessionスコープです。他の詳細が必要な場合はお知らせください。ありがとう – Viola

+0

コードは本当の原因を見るのに十分でした。しかし、私は「Mojarra 2.1.4」と「PrimeFaces 3.0 Final」のような正確なimpl/versionを求めていました。 – BalusC

答えて

3
import javax.enterprise.context.SessionScoped; 

セッションスコープに間違った注釈をインポートしました。 JSF @ManagedBeanを使用している場合は、javax.faces.beanパッケージからスコープをインポートする必要があります。上記はCDI @Namedのみです。

だから、それに応じてそれを修正:

import javax.faces.bean.SessionScoped; 

@ManagedBeanを右スコープなし@NoneScopedとして振る舞います。私。すべてのEL評価で新しいインスタンスが作成されますが、これはまさにあなたが見ている問題のある動作です。

+0

どうもありがとうございました。それは完全に動作します。 – Viola

+0

もう一度ありがとうございます。私は間違いありません。 – Viola

関連する問題