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