Pensemos que tenemos un datatable en el cual las celdas pago y exoneración son editables, deseamos que se actualice el saldo, en base a los valores en estas dos celdas.
agregamos un <p:remoteCommand>
En el @NamedBeans creamos el metodo onCellEdit
obtiene le fila seleccionada
selected = listRecibosdetalles.get(event.getRowIndex());
permite asignar valores a las columnas especificas
listRecibosdetalles.get(event.getRowIndex()).setPago(0.0);
public void onCellEdit(CellEditEvent event) {
try {
selected = listRecibosdetalles.get(event.getRowIndex());
Object oldValue = event.getOldValue();
Object newValue = event.getNewValue();
if (newValue != null && !newValue.equals(oldValue)) {
if (selected.getPago() < 0) {
JSFUtil.warningDialog(rf.getMensajeArb("info.message"), rf.getMensajeArb("info.valornegativo"));
listRecibosdetalles.get(event.getRowIndex()).setPago(0.0);
selected.setPago(0.0);
listRecibosdetalles.get(event.getRowIndex()).setSaldo(selected.getSaldoanterior() - selected.getPago() - selected.getExoneracion());
}
}
En nuestro archivo .xhtml
<p:remoteCommand name="onCellEditTableComplete" update=":form:growl,:form:datatableImpuestos" />
En el <p:datatable>
<p:dataTable id="datatableImpuestos"
rows="10"
value="#{pagoseventualesSearchController.listRecibosdetalles}"
var="item"
paginator="true"
rowKey="#{item.idnivel6}"
selectionMode="single"
emptyMessage="#{app['info.notienedeudapendiente']}"
selection="#{pagoseventualesSearchController.selected}"
filteredValue="#{pagoseventualesSearchController.filtered}"
editable="true" editMode="cell"
>
Agregamos <p:ajax>
<p:ajax event="cellEdit" listener="#{pagoseventualesSearchController.onCellEdit}"
update=":form:growl,:form:datatableImpuestos,:form:mensajes"
oncomplete="onCellEditTableComplete()"/>
En las columnas usamos <p:cellEditor>
<p:column headerText="#{msg.pago}">
<p:cellEditor>
<f:facet name="output"><h:outputText value="#{item.pago}" /></f:facet>
<f:facet name="input"><p:inputText value="#{item.pago}" style="width:100%" label="Year"/></f:facet>
</p:cellEditor>
</p:column>
<p:column headerText="#{msg.exoneracion}">
<p:cellEditor>
<f:facet name="output"><h:outputText value="#{item.exoneracion}" /></f:facet>
<f:facet name="input"><p:inputText value="#{item.exoneracion}" style="width:100%" label="Year"/></f:facet>
</p:cellEditor>
</p:column>
<p:column>
<f:facet name="header">
<p:outputLabel value="#{msg.saldo}"/>
</f:facet>
<p:outputLabel value="#{item.saldo}" >
<f:convertNumber type="number" groupingUsed="true"
minFractionDigits="2" pattern="#0.00"/>
</p:outputLabel>
</p:column>
En el @NamedBeans creamos el metodo onCellEdit
obtiene le fila seleccionada
selected = listRecibosdetalles.get(event.getRowIndex());
permite asignar valores a las columnas especificas
listRecibosdetalles.get(event.getRowIndex()).setPago(0.0);
public void onCellEdit(CellEditEvent event) {
try {
selected = listRecibosdetalles.get(event.getRowIndex());
Object oldValue = event.getOldValue();
Object newValue = event.getNewValue();
if (newValue != null && !newValue.equals(oldValue)) {
if (selected.getPago() < 0) {
JSFUtil.warningDialog(rf.getMensajeArb("info.message"), rf.getMensajeArb("info.valornegativo"));
listRecibosdetalles.get(event.getRowIndex()).setPago(0.0);
selected.setPago(0.0);
listRecibosdetalles.get(event.getRowIndex()).setSaldo(selected.getSaldoanterior() - selected.getPago() - selected.getExoneracion());
}
}
Comments