validate validar formulario form español ejemplos ejemplo con validation jsf jsf-2 primefaces commandbutton

validation - validar - ¿Cómo dejar que la validación dependa del botón presionado?



validar formulario jquery (4)

He creado el formulario y quiero mostrar los elementos existentes anteriores en una tabla mientras crea uno nuevo. Me gustaría mostrar elementos coincidentes a medida que el formulario se llena. Pero cuando intento filtrar la lista sin completar el formulario, aparecen los mensajes de validación y la tabla no se actualiza.

No sé si es posible, pero lo que quiero hacer es algo como esto:

<h:form id="form"> <h:outputText value="Name: "/> <p:inputText value="#{itemsBean.name}" id="name" required="true"/> <br/> <h:outputText value="Description: "/> <p:inputText value="#{itemsBean.description}" id="description" required="true"/> <p:commandButton value="Save" update="form" actionListener="#{itemsBean.save}"/> //validate and save <p:commandButton value="Filter" update="form" actionListener="#{itemsBean.updateItemsList}"/> //don''t validate, and update the table. <p:dataTable id="list" value="#{itemsBean.itemsList}" var="item"> <p:column> <h:outputText value="#{item.name}"/> </p:column> <p:column> <h:outputText value="#{item.description}"/> </p:column> </p:dataTable> </h:form>

Soy muy nuevo en JSF.


Además de la respuesta de BalusC (muy útil y completa), deseo agregar que cuando use un <h:commandButton /> validará (validaciones requeridas, personalizadas) todos los campos en el <h:form /> donde el botón de comando está ubicado, por lo tanto, cuando necesite usar más de un botón de comando, podría considerar que es una buena práctica usar diferentes <h:form /> para diferentes responsabilidades para evitar comportamientos inesperados al enviar acciones de los botones de comando. Está bien explicado en una respuesta de BalusC: múltiples h: formulario en una página JSF

Si su formulario tiene validaciones y no actualiza <h:form /> o no muestra mensajes, puede tener un dolor de cabeza pensando que el <h:commandButton /> no está <h:commandButton /> su acción, pero es probable que sea un problema de validación eso no ha sido mostrado.


Cambie su comando de filtro de esta manera para ignorar la validación:

<p:commandButton value="Filter" update="list" actionListener="#{itemsBean.updateItemsList}" process="@this"/>

EDITAR:

La publicación relacionada en SO, creo que esto también resolverá tu problema

JSF 2.0: ¿Cómo omitir la validación de beans JSR-303?


Entiendo que desea filtrar según el campo de entrada de name . El <p:commandButton> envía por defecto una solicitud ajax y tiene un atributo de process en el que puede especificar qué componentes le gustaría procesar durante el envío. En su caso particular, debe procesar solo el campo de entrada de name y el botón actual (para que se invoque su acción).

<p:commandButton process="@this name" ... />

El atributo de process puede tomar una colección separada por espacios de las ID de cliente (relativas) de los componentes, en donde @this refiere al componente actual. Se predetermina en caso de <p:commandButton> to @form (que cubre todos los campos de entrada del formulario actual y el botón presionado), es por eso que todos fueron validados en su intento inicial. En el ejemplo anterior, todos los demás campos de entrada no se procesarán (y por lo tanto tampoco se validarán).

Si, sin embargo, tiene la intención de omitir la validación required para todos los campos cada vez que se presiona el botón en cuestión, para que eventualmente pueda procesar múltiples campos que no necesariamente deben completarse, entonces necesita hacer el required="true" a conditional" que verifica si el botón ha sido presionado o no. Por ejemplo, permítale que evalúe true solo cuando se haya presionado el botón guardar:

<p:inputText ... required="#{not empty param[save.clientId]}" /> ... <p:inputText ... required="#{not empty param[save.clientId]}" /> ... <p:commandButton binding="#{save}" value="Save" ... />

De esta forma no se validará como se required="true" cuando se presiona un botón diferente. El truco en el ejemplo anterior es que el nombre del botón presionado (que es esencialmente el ID del cliente) se ha enviado como parámetro de solicitud y que simplemente puede verificar su presencia en el mapa de parámetros de solicitud.

Ver también:


He probado esto con envíos no ajax:

<p:inputText ... required="#{not empty param.includeInSave1}" /> ... <p:inputText ... required="true" /> ... <p:commandButton value="Save1" ajax="false"> <f:param name="includeInSave1" value="true" /> </p:commandButton> <p:commandButton value="Save2" ajax="false" />

La primera entrada se requiere validada solo en el envío del botón Guardar1.