2011-01-12 19 views
0

ページを読み込むときに表示するデータをあらかじめ読み込んでおく必要があります。初期化の手順は@ PostConstructアノテーション付きメソッドで実行されますが、データを取得するためにパラメータを使用する必要があります。バッキングBeanの@PostConstructメソッドで使用するパラメータを送信するにはどうすればよいですか?

私は何をしようとしている:

@PostConstruct 
public void init() 
{ 
    List data = getDataFromDB(parameter) /*Need to read a parameter created somewhere else*/ 
} 

は、これを達成する方法はありますか? Propertiesファイルからの読み取り、またはDBからListをフェッチに関する事前

+0

このパラメータの原因はどこですか? – BalusC

答えて

0

方法で

のおかげ?

1

「他の場所に設定されたパラメータ」とは、どういう意味ですか?私は、「どこか別の場所」は「ブラウザからHTTPによって送信された」ことを意味します。あなたはJSF 1.2とそれほどで@ManagedProperty( "#{param.nameOfParameterToRead}")

  • でそれに注釈を付けることができJSF 2.0に

    • を - :このような場合は、あなたの管理Beanに標準プロパティを作成しなければなりませんBeanの説明(faces-config.xml)でmanaged-property要素を使用します。このよう

    
        @ManagedBean 
        @RequestScoped 
        class MyManagedBean {

    @ManagedProperty("#{param.id}") 
        public Integer id; 
    
        @PostConstruct 
        public void init(){ 
        data = getDataFromDB(id) 
        } 
    
    
    
    // setters and getters (mandatory, even though annotation is on an attribute!!!) 
    
    
    } 
    

    慎重に:それは最高ですので、文字列を挿入し、独自のコードに変換の世話をするために、JSFコンバータを使用しない性質を注入します。

  • +0

    ビュースコープBeanでは機能しません。 –

    +0

    @lechlukasz:それは全く違うものです。 JSFマネージドBeanのルールは、より広いスコープに物を注入することができないため、params Beanはリクエストスコープであるため、ビューまたはセッションスコープまたはアプリケーションスコープBeanに注入することはできません。 – fdreger

    +0

    @lechlukasz:標準的な答えはにを使用し、PreRenderViewを聞きます。次に、リスナーで、これがポストバックかどうかをチェックします(facescontext - > externalcontext経由)。チェックは醜いので、あなたに "view action"タグを与えるライブラリの1つを使うことができます。 Seamのように。または、大全集。ビューアクションタグを取得したJSF 2.2の現在のビルドは、まさにあなたが望むものです。 – fdreger

    関連する問題