내 제품은 Primefaces 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})를 사용하고 있기 때문에 빈은 페이지의 마지막 구성 요소 값을 가져옵니다. 근본 원인을 알고 있었지만 해결 방법을 모르겠습니다. 지정된 행에 제출하는 방법