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