Primefaces データテーブルに新しい行を追加しようとしています。次に、このテーブルの内容を送信して、いくつかのビジネス ロジックを実行したいと考えています。データテーブル モデルは、ViewScoped マネージド Bean で維持されるコレクションです。
Primefaces 3.3 で JSF 2.1 を使用しています。
短い例:
<h:form id="my-form">
<p:dataTable value="#{testBean.list}" var="s" id="datatable">
<p:column>
<h:inputText value="#{s}"/>
</p:column>
<f:facet name="footer">
<p:commandButton value="Add row" action="#{testBean.addRow()}" process="@form" update="@form" immediate="true" />
<p:commandButton value="Do stuff" action="#{testBean.doSomeLogic()}" process="@form" update="@form"/>
</f:facet>
</p:dataTable>
</h:form>
マネージド Bean:
@ManagedBean
@ViewScoped
public class TestBean implements Serializable {
private List<String> list;
public TestBean() {
}
@PostConstruct
public void init() {
list = new ArrayList<String>();
list.add("one");
list.add("two");
}
public void addRow(){
list.add(new String());
}
public void doSomeLogic(){
for (String string : list) {
System.out.println(string);
}
}
// getters and setters
}
実際に何が起こるか:
- ユーザーが「行の追加」ボタンをクリックすると、新しい行が追加されます (すぐに真になる必要があるため、検証は行われません。これらのフィールドはより大きなフォームの一部です)。
- ユーザーが「do stuff」をクリックすると、コレクションは適切なサイズ (新しい行を含む) になりますが、ユーザーの入力は考慮されません (既存の行への変更も、新しく追加された行の新しい値もありません)。
新しい値も送信するにはどうすればよいですか? 私は JSF を始めたばかりで、すでに 100% 理解できているかどうかわかりません。
ご協力いただきありがとうございます。
可能な重複:
- 行データを失うことなく、リクエスト スコープの Bean を使用して AJAX 経由で h:dataTable に行を追加します
- JSFのテーブルに行を動的に追加する方法は?
- JSF データテーブル: 行の追加と削除 行の値をクリアする
編集: Jitesh のおかげで問題は解決しました。実際の例は次の場所にあります: JSF2、JSF コンポーネントを動的に追加できますか?