J'ai un formulaire avec un validateur sur un champ. J'en ai deux h:commandButton
s: Ok et Annuler. Lorsque j'impute des données erronées et clique sur Annuler, j'obtiens un message de validation. Que dois-je faire pour que le validateur ne s'exécute pas lorsque je clique sur Annuler?
Dans le cas où vous n'utilisez pas ajax, ou êtes toujours sur JSF 1.x, et vous avez vraiment besoin d'appeler une action commerciale dans la méthode cancel()
(c'est-à-dire que le rechargement de la page est insuffisant), alors votre meilleur pari consiste à ajouter immediate="true"
au bouton. De cette façon, tous les champs de saisie qui n'ont pas immediate="true"
Seront ignorés lors du traitement.
<h:commandButton value="Cancel" action="#{bean.cancel}" immediate="true" />
Sur JSF 2.x, il vaut mieux soumettre le formulaire par <f:ajax>
, Qui par défaut ne traite que @this
Au lieu de @form
.
<h:commandButton value="Cancel" action="#{bean.cancel}">
<f:ajax />
</h:commandButton>
Si vous souhaitez accéder à une autre page ici, ajoutez ?faces-redirect=true
Au résultat dans la méthode cancel()
.
Ou, si vous n'avez en fait pas besoin d'appeler d'action commerciale, utilisez simplement <h:button>
Dans lequel vous spécifiez directement le résultat du cas de navigation (implicite).
<h:button value="Cancel" outcome="previouspage" />
Cela rechargera essentiellement la page par une demande GET. Le <h:button>
N'existe pas dans JSF 1.x, mais vous pouvez également utiliser simplement HTML + JS pour cela.