2009-09-01 2 views
1

JSFを使用しているときに問題が発生しました。私には困っている管理豆があります。私のfaces-config.xmlでは私が持っている:私のJSFではJSFデータ・バインディング

<managed-bean> 
    <description>Info Bean</description> 
    <managed-bean-name>InfoBean</managed-bean-name> 
    <managed-bean-class>bean.InfoBean</managed-bean-class> 
    <managed-bean-scope>request</managed-bean-scope> 
</managed-bean> 

を、私は、次のしている:

<h:outputText value="#{InfoBean.deviceModel}" rendered="true"></h:outputText> 

次のように私はInfoBeanのためのPOJOを持っている:

public class InfoBean { 

String deviceModel; 
String userEmail; 
String active; 

public InfoBean() { 
    // TODO Auto-generated constructor stub 
} 

public String getDeviceModel() { 
    return deviceModel; 
} 
public void setDeviceModel(String deviceModel) { 
    this.deviceModel = deviceModel; 
} 
public String getUserEmail() { 
    return userEmail; 
} 
public void setUserEmail(String userEmail) { 
    this.userEmail = userEmail; 
} 
public String getActive() { 
    return active; 
} 
public void setActive(String active) { 
    this.active = active; 
} 
} 

引数なしのコンストラクタがありますPOJOでもそうですが、何らかの理由でdeviceModelの値が画面に表示されず、その理由がわかりません!どんな助けでも大歓迎です。私は別のマネージドBeanとしてfaces-configにもあるハンドラを持っています。ユーザがボタンをクリックすると、コントロールがハンドラクラスに移動し、POJO InfoBeanのフィールドに値を設定するサービスが呼び出されます。しかしそれはしません!

ご迷惑をおかけして申し訳ございません。

+0

これは入力ミスではありませんか? bean.ImeiInfoBean!= InfoBean – McDowell

+0

申し訳ありませんいくつかの機密情報を保存するために名前を取り除き、そのビットを忘れました。しかし、誤字はありません。 – msharma

+0

ハンドラクラスはInfoBeanへの参照をどのように取得しますか?フィールドが読み取るのと同じインスタンスであることを確認します。イベントの流れを見ることなく問題を診断することは困難です。問題を再現するのに必要な要素を最小限に抑えるシンプルなアプリケーションを作成します。 – McDowell

答えて

1

私はこのようなモデルを持っていたので、私はこの問題を解決しました。JSPボタンはクリックされました - >ハンドラ - >ハンドラコールハンドラ - >ハンドラコールメソッド - サービスはマネージドBean InfoBeanを生成して返しますそれを処理する

セッションとしてスコープの設定ファイルで宣言されていても、マネージドBeanは実際にはセッションの一部ではありませんでした。私のハンドラでInfoBeanを返却した後、私は次のように追加しました。

HttpSession session = (HttpSession)FacesContext.getCurrentInstance().getExternalContext().getSession(false); 
    session.setAttribute("InfoBean", InfoBean); 

これはすぐにセッションに配置され、値が表示され始めました! :-))

私はこれについていくつかの記事を読んだことがありますが、これは言及されたことはありませんでした。私が得たもう1つの提案は、InfoBeanをgetterとsetterを持つHandlerのプライベートインスタンスにすることでした。この方法ではハンドラで作成され、またolkになります。私はこのアプローチを試していません。助けてくれたすべての人に感謝します。

0

BeanのdeviceModelプロパティがどのように設定されていますか?

本当にnullではありませんか?あなたが最終的にgetterメソッドでログを入れていることを確認することができます。

public String getDeviceModel() { 
    System.out.println("Getter called: " + deviceModel + "."); 
    return deviceModel; 
} 

結局、あなたはセッションとして設定するには、Beanのスコープを変更することができます。

0

あなたの投稿は、リクエストスコープではセッションスコープではないことを示しています。セッションに変更した場合は、setAttribute()を使用する必要はありません。それとも、私は何かを逃しています。

0

セッションの範囲を変更してもセッションが有効ではありませんでしたが、これを動作させるには上記のHttpSessionにコードを追加する必要があります。

ありがとうございました。

関連する問題