Я попытался заставить его работать с данными, так как он может получить значение до уровня ячейки.Я использую editmode = "ячейка", чтобы я мог получить доступ к уровню ячейки.inputText отключен, потому что вы не хотите, чтобы пользователь его редактировал.xhtml:
<datatable value"#{yourBean.listValue" var="list" editMode="cell" editable="true"
----and other stuffs----->
<p:ajax event="cellEdit" listener="#{yourBean.selectedCell}"/>
<p:column headerText="A">
<p:cellEditor>
<f:facet name="output">
<p:outputLabel value="#{list.valueA}"/>
</f:facet>
<f:facet name="input">
<p:inputText value="#{list.valueA}" disabled="true"/>
</f:facet>
</p:cellEditor>
</p:column>
<p:column headerText="B">
<p:cellEditor>
<f:facet name="output">
<p:outputLabel value="#{list.valueB}"/>
</f:facet>
<f:facet name="input">
<p:inputText value="#{list.valueB}" disabled="true"/>
</f:facet>
</p:cellEditor>
</p:column>
----and so on---
</p:datatable>
YourBean:
String result, A, B;
public void selectedCell(CellEditEvent event) {
switch(event.getColumn().getHeaderText()) {
case "A": A= event.getOldValue().toString();
break;
case "B": B = event.getOldValue().toString();
break;
}
result = A + B;
}
Я использую переключатель, если вы хотите, чтобы результат был в порядке.для получения дополнительной информации о редактировании ячеек в datatable, проверьте эту ссылку