ho il seguente pezzo di codice all'interno di un modulo:funzionalità Disattivazione commandButton se la convalida inputText fallisce o chiamata AJAX inizia
<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>
Così i messaggi di validazione funzionano bene sull'elemento inputText
. Ma il pulsante di invio esegue ancora una richiesta Ajax quando viene fatto clic, anche se l'input non è valido. Voglio che la richiesta Ajax venga inviata se l'inputText è valido.
Come faccio?
Inoltre; c'è un altro caso che mi piacerebbe disattivare il pulsante. Questo è il caso in cui inputText viene convalidato e l'utente fa clic sul pulsante. La ragione di questo è, non voglio che l'utente invada erroneamente richieste. (premere ripetutamente il pulsante di invio)
Attualmente, la funzione javascript handleOnclick
mostra solo una finestra di dialogo modale che dice "aspetta". Poiché quella finestra di dialogo è modale, lo sfondo non è accessibile. Tuttavia, ciò non impedisce ancora all'utente di premerlo ripetutamente perché passa 1 secondo tra la visualizzazione di dialogo onclick e modale. Inoltre; questo approccio non impedisce l'invio di dati non validi. Cosa puoi suggerire?
Uso JSF2.0 e Primefaces 3.0.
Qualsiasi aiuto apprezzato.
Grazie per la risposta BalusC. Quello che hai proposto funziona ma con un'esperienza utente negativa. Quando carico la pagina e inserisco del testo valido nell'inputText, il comando Command non viene abilitato immediatamente. Dal momento che è disabilitato inizialmente al caricamento della pagina, dopo aver inserito qualcosa di valido, devo cliccare da qualche altra parte sulla pagina in modo che l'evento di sfocatura si inneschi e che i pulsanti siano abilitati. Solo allora posso fare clic sul pulsante. Tuttavia, ciò potrebbe causare un'esperienza utente negativa. Come posso affrontarlo? –
Quindi c'è un campo di input singolo? Ho capito che hai più campi di input che devono essere convalidati. Puoi semplicemente rimuovere il comando '# {facesContext.postback}'. – BalusC
Quindi ho solo 'disabled =" # {facesContext.validationFailed} "' ora. Ciò risolve il problema che ho menzionato, ma la stessa cosa accade quando la validazione fallisce. Carico la pagina, inserisco qualcosa di non valido, il pulsante viene disabilitato. Quindi inserisco qualcosa di valido ma devo fare clic da qualche altra parte per abilitare nuovamente il pulsante. Solo allora posso fare clic sul pulsante. Cosa suggeriresti per evitare un'esperienza utente negativa in uno scenario del genere? –