tengo el siguiente fragmento de código dentro de un formulario:funcionalidad Desactivación commandButton si la validación falla o inputText llamada AJAX comienza
<p:panel id="panel" header="lalalala">
<h:panelGrid columns="5">
<h:outputLabel value="Enter name" for="name" />
<p:inputText id="name" value="#{userBean.name}"
required="true" label="name" maxlength="15"
validatorMessage="oops"
requiredMessage="ooopps">
<f:validateRegex
pattern="^somepattern$">
</f:validateRegex>
<p:ajax event="blur" update="inputValidationMessage" />
</p:inputText>
<p:message id="inputValidationMessage" showSummary="false"
for="name" />
<p:watermark for="name" value="eg. John" />
</h:panelGrid>
<p:commandButton id="submitButton" value="Submit" update="panel"
actionListener="#{userBean.save}"
onclick="handleOnclick"
oncomplete="handleAjaxResponse(xhr, status, args)">
</p:commandButton>
<p:messages autoUpdate="true" globalOnly="true" showDetail="true" />
</p:panel>
Así que los mensajes de validación funcionan bien en el elemento inputText
. Pero el botón de enviar sigue haciendo una solicitud de Ajax cuando se hace clic, aunque la entrada no sea válida. Quiero que se envíe la solicitud de Ajax si el texto de entrada es válido.
Cómo lo hago?
Además; hay otro caso que me gustaría desactivar el botón. Este es el caso donde inputText se valida y el usuario hace clic en el botón. La razón de esto es que no quiero que el usuario inunde las solicitudes por error. (es decir, presione repetidamente el botón Enviar)
Actualmente, la función de Javascript handleOnclick
solo muestra un cuadro de diálogo modal que dice "esperar". Como ese diálogo es modal, el fondo es inaccesible. Sin embargo, eso no impide que el usuario lo presione repetidamente porque transcurre 1 segundo entre el clic y el diálogo modal que se muestra. Además; este enfoque no evita la presentación de datos no válidos. ¿Qué puedes sugerir?
Uso JSF2.0 y Primefaces 3.0.
Cualquier ayuda apreciada.
Gracias por la respuesta BalusC. Lo que usted propuso está funcionando pero con una mala experiencia del usuario. Cuando cargo la página e ingreso un texto válido en el texto de entrada, el comandoBotón no se habilita inmediatamente. Como está desactivado inicialmente en la carga de la página, después de ingresar algo válido, tengo que hacer clic en algún otro lugar de la página para que se active el evento de desenfoque y se activen los botones. Solo entonces puedo hacer clic en el botón. Sin embargo, esto puede causar una mala experiencia del usuario. ¿Cómo puedo lidiar con eso? –
Entonces, ¿hay un solo campo de entrada? Entendí que tiene múltiples campos de entrada que necesitan ser validados. Simplemente puede eliminar la comprobación '# {facesContext.postback}' y luego. – BalusC
Así que solo tengo 'disabled =" # {facesContext.validationFailed} "' ahora. Eso resuelve el problema que mencioné, pero sucede lo mismo cuando falla la validación. Cargué la página, ingresé algo inválido, el botón se deshabilita. Luego introduzco algo válido pero tengo que hacer clic en otro lugar para habilitar el botón nuevamente. Solo entonces puedo hacer clic en el botón. ¿Qué sugeriría para evitar la mala experiencia del usuario en tal escenario? –