私の製品では、Primeface 2.2でJSFを使用しています。私が必要とするのは、別のデータテーブル内のサブデータテーブルを処理することです。コードは以下の通りです。 JSFでデータテーブル内にサブテーブルをバインドする
<h:form>
<p:dataTable id="myInvoiceTable"
value="#{globalBean.invoices}" var="invoice">
<p:column>
<f:facet name="header">
<h:outputText value="Bill ID" />
</f:facet>
<h:outputText value="#{invoice.billId}" />
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="Item" />
</f:facet>
<h:outputText value="#{invoice.item}" />
</p:column>
<p:rowExpansion>
<h:selectOneMenu id="reasons" value="#{invoiceAction.reason}">
<f:selectItem itemLabel="Reason 1" itemValue="Reason 1"></f:selectItem>
<f:selectItem itemLabel="Reason 2" itemValue="Reason 2"></f:selectItem>
</h:selectOneMenu>
<p:inputText id="activity_amount" value="#{invoiceAction.activity_amount}"/>
<p:commandButton value="PROCESS" action="invoice_process" update="actions_table">
</p:commandButton>
<p:dataTable id="actions_table" value="#{invoice.actions}" var="invAction">
<p:column>
<h:outputText value="#{invAction.reason}" />
</p:column>
<p:column>
<h:outputText value="#{invAction.activity_amount}" />
</p:column>
</p:dataTable>
</p:rowExpansion>
</p:dataTable>
は、ここに私の豆です。
public class Invoice {
private int billId;
private String item;
private List<InvoiceAction> actions;
// Getter & setter here
}
public class InvoiceAction {
private String reason;
private double activity_amount;
private int billId;
// Getter & setter here;
}
しかし、HTMLが生成されると、それは必要に応じて処理されません。データテーブルの最後の行の選択メニューのみが、ユーザーが選択したデータを受け取ることができます。他のユーザーは選択できません。すべての行のすべての選択メニューが同じオブジェクト(#{invoiceAction})を使用しているため、Beanはページ内の最後のコンポーネントの値を取得します。私は根本的な原因を知っていたが、私はそれを解決する方法を知らない。彼らは指定された行に提出する方法?