Saber que columna se edita
Para conocer que columna se edita de un datatable
En el ejemplo podemos editar la columna de vehiculos y la columna pasajeros
<p:outputLabel value="#{msg['field.idtipovehiculo']}"/>
<p:dataTable id="datatableTipoVehiculo" var="item" value="#{solicitudAdministrativoController.tipoVehiculoCantidadBeansList}"
editable="true" editMode="cell" widgetVar="cellCars">
<f:facet name="header">
</f:facet>
<p:ajax event="cellEdit" listener="#{solicitudAdministrativoController.onCellEdit}"
update=":form:msg, :form:datatableTipoVehiculo,:form:datatableDisponibles, :form:totalTipoVehiculoCantidad" />
<p:column headerText="#{msg['field.idtipovehiculo']}">
<h:outputText value="#{item.tipovehiculo.idtipovehiculo}" />
</p:column>
<p:column id="cantidadcoledit" headerText="#{msg['field.vehiculos']}" style="width:150px">
<p:cellEditor>
<f:facet name="output"><h:outputText value="#{item.cantidad}" /></f:facet>
<f:facet name="input"><p:inputText value="#{item.cantidad}" style="width:96%" label="#{msg['field.buses']}"/></f:facet>
</p:cellEditor>
</p:column>
<p:column headerText="#{msg['field.maximo']}" style="width:150px">
<h:outputText value="#{item.maximo}" />
</p:column>
<p:column id="pasajeroscoledit" headerText="#{msg['field.pasajeros']}" style="width:150px">
<p:cellEditor>
<f:facet name="output"><h:outputText value="#{item.pasajeros}" /></f:facet>
<f:facet name="input"><p:inputText value="#{item.pasajeros}" style="width:96%" label="#{msg['field.pasajeros']}"/></f:facet>
</p:cellEditor>
</p:column>
</p:dataTable>
En en controller controlamos la columna que se edito
Usamos
UIColumn col = (UIColumn) event.getColumn();
El metodo permite conocer el nombre de la columna
col.getHeaderText().toUpperCase()
Que fue definido con textHeader
<p:column headerText="#{msg['field.vehiculos']}" style="width:150px">
public void onCellEdit(CellEditEvent event) {
Object oldValue = event.getOldValue();
Object newValue = event.getNewValue();
int alteredRow = event.getRowIndex();
//Obtiene el encabezado de la columna que se edita la propiedad headerText
UIColumn col = (UIColumn) event.getColumn();
Integer v = (Integer) newValue;
switch (col.getHeaderText().toUpperCase()) {
case "VEHICULOS":
if (v < 0 || v > tipoVehiculoCantidadBeansList.get(alteredRow).getMaximo()) {
tipoVehiculoCantidadBeansList.get(alteredRow).setCantidad(0);
}
break;
case "PASAJEROS":
if (tipoVehiculoCantidadBeansList.get(alteredRow).getPasajeros() < 0) {
tipoVehiculoCantidadBeansList.get(alteredRow).setPasajeros(0);
}
break;
}
changeDaysViewAvailable();
if (newValue != null && !newValue.equals(oldValue)) {
FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Cell Changed", "Old: " + oldValue + ", New:" + newValue);
FacesContext.getCurrentInstance().addMessage(null, msg);
}
} // </editor-fold>
Last updated