2011-01-25 16 views
1

私はJSFの新機能ですが、JSFライフサイクルを読んでいますが、これを実現する方法を理解できませんでしたか?jsfのページの読み込みにドロップダウンを取り込む方法は?

私はコントローラーに「都市」と他のコントローラー「国」と言っています。今度は新しいページを作成し、検索機能を提供します。そのページに2つのドロップダウンを表示しました(国と都市の1つ)。ページの読み込みに最初のドロップダウンを追加します。どのコントローラを使用するか教えてください。都市/国は?または新しいものを作成しますか?ページの読み込み時にデータを読み込む方法

ありがとうございます!

答えて

2

国と都市のコレクションを保持するページに1つのコントローラを使用することが望ましいです。 ページを読み込んでいる国を読み込むには、@Postconstructでアノテーションされたメソッドを作成する必要があります。 この方法では、初期化を行います。つまり、あなたのコントローラで

@PostConstruct 
public void init(){ 
    //do your initialization 
} 
0

あなたはpublic List<SelectItem> getFirmaTyp()をゲッタリング必要があり、あなたのビューで、あなたは次のようなものを持っている必要があります。

<h:selectOneMenu value="#{yourController.firma.typ.id}"> 
    <f:selectItems value="#{yourController.firmaTyp}" /> 
</h:selectOneMenu> 

ゲッターはページが表示されるたびに呼び出されます。私の例では、ポストバック時には、dropDownのidはyourController.firma.typ.idのようなエンティティファームタイプとidに設定されます

1

国はおそらく静的なコレクションなので、静的なマップでアプリケーションスコープのBeanを作成できます各国(主要国名、価値国コード)を保持する。

次に、国のドロップダウンを必要とするすべてのビューで<f:selectItems>を単にバインドします。

.Xhtml

<h:selectOneMenu> 
    <f:selectItems value="#{myController.listItems}"/> 
</h:selectOneMenu> 

豆:;

(ところで、このソリューションのためのBalusCにクレジット)

4

誰もが正しいですが)、あなたは<f:selectItems/>

例を使用する必要があります

public class MyController{ 
    //The list with the items 
    private List<SelectItem> listItems = null; 

    public MyController { 
     loadCombo(); 
    } 

    (...) 

    //Loading the items 
    private void loadCombo() { 
     listItems = new ArrayList<SelectItem>(); 

     //You can do with BD data using a for. How to add a new item: 
     //listItems.add(new SelectItem("itemValue", "itemLabel")); 

     listItems.add(new SelectItem("1", "Item 1")); 
     listItems.add(new SelectItem("2", "Item 2")); 
     listItems.add(new SelectItem("3", "Item 3")); 
     listItems.add(new SelectItem("4", "Item 4")); 
    } 

    (...) 

    //Getters and setters 
} 

"get"メソッドでリストを作成しないでください。これは、JSFがそれを複数回呼び出すため、パフォーマンスが低下するためです。

+0

はい。 getterメソッドにはロジックを書き込まないでください。これは毎回呼び出されるためです。 – Krishna

関連する問題