PostValidate in Datatable

2

I currently have a DataTable in which I show customer contacts. What I need is to validate that the inserted records are not repeated.

<p:fieldset legend="Informacion de Contacto del Cliente">
    <p:dataTable id="dataTableContactos" 
                value="#{clienteController.listaContactos}" 
                var="contactos"
                editable="true"
                widgetVar="dlgWidContactosCliente"
                emptyMessage="No se encontraron contactos asociados al cliente."
                selectionMode="single"
                selection="#{clienteController.currentContacto}"
                rowKey="#{contactos.id}">
        <p:ajax event="rowSelect" 
                   listener="#{clienteController.onRowSelectContacto}"/>
        <p:ajax event="rowEdit" 
               listener="#{clienteController.onRowEditContacto}" />
        <p:ajax event="rowEditCancel" 
               listener="#{clienteController.onRowCancelContacto}" />  

        <f:event listener="#{clienteController.validarContacto}" 
                type="postValidate" />

        <c:if test="#{clienteController.cliente.id > 0}">
            <f:facet name="header">
                <p:outputPanel style="text-align: right;">
                    <p:commandButton value="Nuevo Contacto" 
                                    actionListener="#{clienteController.onRowAddContacto()}"
                                    update="dataTableContactos" />
                </p:outputPanel>
            </f:facet>
        </c:if>                    

        <p:column id="colContactosId" 
                   headerText="Id"
                   visible="true">     
            <p:cellEditor>
                <f:facet name="output">
                    <h:outputText value="#{contactos.id}" />
                </f:facet>
                <f:facet name="input">
                    <p:inputText id="txtContactoId" 
                                  value="#{contactos.id}"/>
                </f:facet>
            </p:cellEditor>
        </p:column>

        <p:column id="colContactosTipoContacto" 
                   headerText="Tipo Contacto">
            <p:cellEditor>
                <f:facet name="output">
                    <h:outputText value="#{globalController.getEtiquetaContactoTipos(contactos.tipoContacto)}"/>
                </f:facet>
                <f:facet name="input">
                    <p:selectOneMenu id="cmbContactosTipoContacto" 
                                      required="false"
                                      value="#{contactos.tipoContacto}"
                                      style="width: 90%"
                                      placeholder="Seleccione el tipo de Contacto"
                                      immediate="false" >
                        <f:selectItem itemValue="#{null}" 
                                       itemLabel="--Seleccione--" />
                        <f:selectItems value="#{globalController.comboContactoTipos}" />
                    </p:selectOneMenu>
                </f:facet>
            </p:cellEditor>
        </p:column>

        <p:column id="colContactosValorContacto" 
                   headerText="Descripcion">
            <p:cellEditor>
                <f:facet name="output">
                    <h:outputText value="#{contactos.valor}"
                                   class="textBoxWidth100"/>
                </f:facet>
                <f:facet name="input">
                    <p:inputText id="txtContactosValorContacto" 
                                  value="#{contactos.valor}" 
                                  class="textBoxWidth100"
                                  placeholder="Ingrese la descripcion del contacto"
                                  immediate="false"/>
                </f:facet>
            </p:cellEditor>
        </p:column>

        <p:column id="colContactosEstadoContacto" 
                   headerText="Estado">
            <h:outputText value="#{globalController.getEtiquetaGeneralEstados(contactos.estado)}"/>
        </p:column>

        <p:column id="colContactosFecCreacionContacto" 
                   headerText="Fec. Creacion" >
            <h:outputText value="#{contactos.fechaCreacion}">
                <f:convertDateTime pattern="dd/MM/yyyy HH:mm:ss" />
            </h:outputText>
        </p:column>

        <p:column visible="false">
            <h:inputHidden id="txtCurrentTabContacto" 
                            value="#{clienteController.curIdTab}"
                            validator="#{validateContacto.validate}" >                    
            </h:inputHidden>
        </p:column>

        <p:column style="width: 50px"
                   headerText="Editar">
            <p:rowEditor />
        </p:column>
    </p:dataTable>
</p:fieldset>

For which I have created an Ajax PostValidate event in which the components are received and then I proceed to obtain their content, but they always arrive null

public void validarContacto(ComponentSystemEvent event) {
    boolean valid = true;

    FacesContext facesContext = FacesContext.getCurrentInstance();
    UIComponent components = event.getComponent();

    HtmlInputText uiInputId = (HtmlInputText) components.findComponent("txtContactoId");
    HtmlSelectOneMenu uiInputTipo = (HtmlSelectOneMenu) components.findComponent("cmbContactosTipoContacto");
    HtmlInputText uiInputValor = (HtmlInputText) components.findComponent("txtContactosValorContacto");

    int id = uiInputId.getLocalValue() == null ? 0 : (int) uiInputId.getLocalValue();
    String tipo = uiInputTipo.getLocalValue() == null ? "" : (String) uiInputTipo.getLocalValue();
    String valor = uiInputValor.getLocalValue() == null ? "" : (String) uiInputValor.getLocalValue();
}

I tried with getLocalValue () and getSubmittedValue (); additional I tried with the UIInput components but in all the scenarios I always get null

    
asked by Fernando Ortega 21.08.2017 в 01:17
source

0 answers