2012-03-05 52 views
0

いくつかの調査を行っているときに同様の質問がありましたが、いずれも問題に実際には対処しませんでした。JSF2/Primefacesでコンポーネントを動的に追加/削除する

入力条件と送信ボタンがあるフォームがあります。 [submit]をクリックすると、primefacesデータテーブルがフォームの下にいくつかの結果とともに表示されます。私が必要とするのは、ページ全体を更新せずに入力したデータに応じて異なるテーブルを表示することです。例えば。ユーザーがフォームに値としてPersonを入力すると、Person表の結果が表示されます。ただし、ユーザーが会社を選択すると、会社の結果が対応する列とともに表示されます。

+0

「ページ全体を更新せず」、代わりにサイト全体の答えを – djmj

答えて

2

update属性を使用して、データテーブルを更新してください。さらに、<p:columns>を使用して列を動的に生成することもできます。以下のようなもので

<p:inputText value="#{bean.input}" /> 
<p:commandButton value="submit" action="#{bean.submit}" update="table" /> 

<p:dataTable id="table" value="#{bean.model}" var="item"> 
    <p:columns value="#{bean.columns}" var="column"> 
     <h:outputText value="#{item[column]}" /> 
    </p:columns> 
</p:dataTable> 

public void submit() { 
    model = populateModelBasedOn(input); 
    columns = populateColumnsBasedOn(input); 
} 
+0

感謝を特定のコンポーネントのみを更新するprimefacesは、AJAXリクエストの属性の更新を使用しています。私が間違っている場合は私を修正しますが、モデルはテーブルのキーと値のペアを含む単一のHashMapを持つリストです。次に、中括弧表記法を使用して、ハッシュマップの各値に列名(項目[列])でアクセスしますか?あなたが見ることができるようにjsfにまったく新しい:) –

+0

それはちょうどjavabeanでもかまいません。中カッコ表記法では、動的プロパティ名を使用できます。 '#{bean.columns}'はプロパティ名だけを含んでいます。 – BalusC

関連する問題