2011-08-16 13 views
0

私はJSFの新機能です。私のプロジェクトで@ManagedBean @RequestScopedを使用しています。私のプロジェクトで4ページ使用しています。私の問題は、2番目、3番目、4番目のページでBeanの値が維持されないことでした。 getterとsetterを正しく使用していますか? @ManagedPropertyを使用しない場合、Beanの値は適切に維持されます。しかし、私は @ManagedPropertyを使用する必要があります。この問題を解決する方法を教えてください。私は参照のためにいくつかのサンプルコードをコピーしました。@ManagedPropertyによって管理されたBeanプロパティが次のページで維持されない

@ManagedBean 
@RequestScoped 
public class ArticlePrepToolManagedBean implements Runnable, Serializable { 

    @ManagedProperty (value="#{param.jidName}") 
    private String jidName; 

    @ManagedProperty (value="#{param.aidName}") 
    private String aidName; 

    private List<com.elsevier.ArticlePrepTool.db.ItemZipContains> usabilityDetailList = null; 

    public String getAidName() { 
      return aidName; 
    } 

    public void setAidName(String aidName) { 
      this.aidName = aidName; 
    } 

    public String getJidName() { 
      return jidName; 
    } 

    public void setJidName(String jidName) { 
      this.jidName = jidName; 
    } 

    public List<ItemZipContains> getUsabilityDetailList() { 
     return usabilityDetailList; 
    } 

    public void setUsabilityDetailList(List<ItemZipContains> usabilityDetailList) { 
     ArticlePrepToolManagedBean.usabilityDetailList = usabilityDetailList; 
    } 

} 

マイプロジェクトのURLは(にhttp:// localhost:8080/articlepreptool /)ですが、私のプロジェクトのための入力がjidName = AEA aidName = 10663です。次のhref "PrepTool"を使用してユーザーがトリガーした場合の入力です。入力に依存して、私は自分のプロジェクトDB(JPAを使って)にいくつかのデータを取り出し、最初のページにデータをリストアップします。しかし、もし私が次のページに行くならば、私はDBから得たそのリストに格納されているすべての以前のデータはすべてリストの値であり、beanにセットされた変数はnullになります。ですから、この問題を解決する方法を教えてください。@ManagedPropertyを使用した場合にのみ問題が発生します。私は入力値を取得するために@ManagedPropertyを使用しました。私のプロジェクトの入力値は他のWebページから来るので、urlを通して入力値を取得します。

答えて

1

@ManagedProperty("#{param.foo}")は基本的にBeanの構築後にBeanプロパティーとして"foo"という名前のHTTPリクエストパラメータを設定します。 nullの値を取得している場合は、これらのパラメータがHTTPリクエストに存在しないことを意味します。

<a href="page2.xhtml?jidName=foo&aidname=bar"> 

この:

<h:link value="Go to page2" outcome="page2"> 
    <f:param name="jidName" value="#{bean.jidName}" /> 
    <f:param name="aidName" value="#{bean.aidName}" /> 
</h:link> 

はこのようなものになります:

あなたはプレーンなリンクでナビゲートしていると仮定すると、あなたはリクエストパラメータを含めるようにリンクを修正する必要がありますこれらのパラメータをBeanプロパティとして設定することができます。

@ManagedPropertyの代わりに、<f:viewParam>をすべてのページに使用し、includeViewParams=trueを結果に追加することもできます。関連項目ViewParam vs @ManagedProperty(value = "#{param.id}")

フォーム送信でナビゲートする場合は、実際に使用する理由はありません。あるいは、バニラページツーページの単純なナビゲーションのために、リンクの代わりにフォームを乱用する必要があります。

+0

私のプロジェクトURLは(http:// localhost:8080/articlepreptool /)ですが、私のプロジェクトの入力はjidName = AEA aidName = 10663です。その入力はhref PrepToolを使用してユーザーがトリガーした場合の他のWebページによって与えられます。入力に依存して私のプロジェクトDB(JPAを使用)の一部のデータがフェッチされ、最初のページにデータがリストされます。しかし、もし私が次のページに行くならば、私はDBから得たそのリストに格納されているすべての以前のデータはすべてリストの値であり、beanにセットされた変数はnullになります。お知らせ下さい。ありがとうございました – Grace

+0

あなたの応答をありがとう。この問題の解決方法を詳しく説明してください。 – Grace

関連する問題