validar validadores solo regulares numeros formulario expresiones especiales ejemplo caracteres jsf jsf-2 primefaces

jsf - validadores - Omisión universal de parámetros de validación en las entradas requeridas



validadores java (3)

Por favor, consulte el código modificado a continuación para los campos obligatorios. Puede usar # {empty param.onlySave} para los campos que desea omitir la validación y según sus requisitos.

<p:inputText value="#{cc.attrs.data.exampleData1}" required="#{not empty param.onlySave}"/> <p:inputText value="#{cc.attrs.data.exampleData2}" required="#{not empty param.onlySave}"/> <p:inputText value="#{cc.attrs.data.exampleData3}" required="#{not empty param.onlySave}"/> <p:commandButton value="Zapisz zmiany" action="#{cc.attrs.controller.save()}" update="@form"> <f:param name="onlySave" value="true"/> </p:commandButton>

Cómo hacer que un botón que puede omitir la web requiera validación (pero aún así quiero procesar todos los datos, por lo tanto, lo inmediato y así sucesivamente no puede ser cierto).

Importante es que debe ser universal. En este momento estoy usando en cada condición de campo requerida con algún parámetro de solicitud. Ejemplo de código a continuación

<p:inputText value="#{cc.attrs.data.exampleData1}" required="#{param[''onlySave''] == null}"/> <p:inputText value="#{cc.attrs.data.exampleData2}" required="#{param[''onlySave''] == null}"/> <p:inputText value="#{cc.attrs.data.exampleData3}" required="#{param[''onlySave''] == null}"/> <p:commandButton value="Zapisz zmiany" action="#{cc.attrs.controller.save()}" update="@form"> <f:param name="onlySave" value="true"/> </p:commandButton>

Esta solución está bien porque puedo en cada página simplemente agregar este param al botón y se saltea la validación, pero cuando mi botón de guardar no hace ninguna redirección, en caso de fallar alguna validación de Java en el método de guardar, solo estoy agregando algún mensaje sin redireccionar y luego perdí todos los estilos requeridos de las entradas.

¿Hay alguna posibilidad de establecer solo onlySave param en null en el método guardar cuando falla la validación o quizás algunas soluciones mejores?

Editar: Balus responde muy bien, pero con validación de bean como:

@Pattern(regexp = "^([^0-9]*)$", message = "only non numbers") String field;

Procesa todos los datos más allá de ese campo. Lo mejor sería ignorar solo la propiedad de campo requerida, no la validación, etc.

Edit2:

<tr> <td class="label"> <p:outputLabel id="label" for="#{cc.attrs.componentId}" value="#{cc.attrs.label}"/> </td> <td class="value"> <cc:insertChildren/> --here component with componentId </td> </tr> <tr class="errorMessage"> <td class="label"/> <td class="value"> <p:message id="error" for="#{cc.attrs.componentId}" /> </td> </tr>


Descubrí una solución:
Página JSF

<h:form id="form" prependId="false"> <c:if test="#{param[''onlySave''] eq true}"> <c:set value="#{false}" target="#{myBean}" property="required"/> </c:if> <p:inputText value="#{myBean.required}"/> <p:growl id="msgs" showDetail="true" /> <p:inputText id="data1" value="#{myBean.data1}" required="#{myBean.required}" /> <p:inputText id="data2" value="#{myBean.data2}" required="#{myBean.required}"/> <p:inputText id="data3" value="#{myBean.data3}" required="#{myBean.required}"/> <p:commandButton value="Zapisz zmiany" action="#{myBean.save}" /> </h:form>

Frijol

@ManagedBean @ViewScoped public class MyBean implements Serializable{ private String data1, data2, data3; private boolean required; @PostConstruct public void init(){ required = true; } public void save() { System.out.println(data1+", "+data2+", "+data3); required = false; //FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,"Info","Saved")); // FacesContext.getCurrentInstance().getExternalContext().getRequestMap().put("onlySave", "false");// FacesContext.getCurrentInstance().getExternalContext().getRequestMap().get("onlySave")); } // ... Getters & Setters }


Hasta ahora, la mejor solución que descubrí es:

//p:label and p:message with property for=someId for each input above <p:inputText id="someId" value="#{cc.attrs.data.exampleData1}" required="#{param[''onlySave''] == null}"/> <p:inputText value="#{cc.attrs.data.exampleData2}" required="#{param[''onlySave''] == null}"/> <p:inputText value="#{cc.attrs.data.exampleData3}" required="#{param[''onlySave''] == null}"/> <p:commandButton value="save only" action="#{cc.attrs.controller.save()}" update="@(.ui-message,.ui-outputlabel)"> <f:param name="onlySave" value="true"/> </p:commandButton> <p:commandButton value="accept button" action="#{cc.attrs.controller.accept()}" update="@form"> </p:commandButton>

El botón Guardar solo actualiza todos los errores y etiquetas, por lo que puedo ver los errores de los convertidores, etc., pero no pierdo los estilos necesarios en las entradas. En este ejemplo, acabo de perder el color rojo de los bordes de entrada.

Si usa * en las etiquetas para los campos obligatorios, no actualice .ui-outputlabel