Pregunta

Estoy luchando por que mi bean actualice con los valores de la nueva página. Tengo dos botones de envío en mi página y alterno lo que se muestra en función de un valor booleano para en qué modo está mi página. . Cuando la página está en modo de proceso (validar), muestro el botón Enviar que no tiene inmediato = "verdadero". El problema con el que me estoy encontrando es cuando estoy en modo de actualización (sin validación) los valores en los campos de entrada no se están configurando en el bean. Todo lo que quiero hacer cuando está en este modo es guardar la página tal como está y salir. No se necesita validación porque la información en esa página no está lista para procesar o "realmente usar" si es así. Dicho esto, si tengo mi página en modo de proceso (validar), entonces todo funciona según lo previsto. Los valores se envían y guardan.

Todavía no estoy publicando ningún código, ya que no hay nada especial en lo que estoy tratando de hacer. Simplemente tengo un valor de enlace que apunta a un simple getter / setter. Mi frijol está en @viewscope.

He intentado usar los ejemplos de Balusc en su excelente publicación de Blogspot: debug-jsf-lifecycle. Poner inmediato = "verdadero" en los campos de entrada no tiene ningún efecto al hacer clic en el botón Enviar con inmediato = "True". Sin embargo, todo, la forma en que lo entiendo es inmediato = "verdadero" en el Uicommand es lo que le dice a la aplicación que saltee la validación o no. Ponerlo en los campos de entrada simplemente hace que la validación ocurra antes. ¿Me estoy perdiendo de algo?

¿Algunas ideas? ¡Se agradece cualquier ayuda con esto!

Detalles de la aplicación:
JSF 2.0.3
Tomcat 6.0.14

¿Fue útil?

Solución

los immediate="true" no tiene la intención de deshabilitar la validación. Tiene la intención de priorizar la validación o omitir el procesamiento de la entrada por completo. Ver también el resumen al final del artículo.

Debe deshabilitar la validación estableciendo required="false", o <f:validator disabled="true">. Aquí hay un ejemplo que supone que tienes un boolean process propiedad que representa el estado del formulario:

<h:inputText value="#{bean.value1}" required="#{bean.process}" />
<h:inputText value="#{bean.value2}" required="#{bean.process}">
    <f:validator validatorId="someValidatorId" disabled="#{!bean.process}" />
</h:inputText>
...

De esta manera no se requieren los campos y no se validan cuando process evaluar false.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top