Bonjour,

Je me creuse la tête sur un cas de validation de formulaire en jsf, et je n'arrive pas à trouver une solution satisfaisante.

Imaginons un formulaire simple pour créer un utilisateur, avec par exemple, nom, prénom et email.
Deux boutons d'actions, "enregistrer", et "envoyer un mail".
L'action "enregistrer" étant la principale action, je vais au niveau vue mettre comme obligatoire le nom et le prénom (h:inputText.... required="true") .
Impossible donc de valider le formulaire si nom et prénom ne sont pas renseignés, si validation du formulaire sans un de ces champs message d'erreur, et "highlight" du champ de saisie en rouge.
Tout va bien!

Passons à la deuxième action, "envoyer un mail".
Difficile d'envoyer un mail sans avoir l'adresse email, la saisie du mail et donc obligatoire.
Vu que je ne peux pas mettre le champ mail à required=true, car j'ai envie d'autoriser la sauvegarde sans mail, obligé de faire cette validation dans l'action du managedBean, et de balancer des facesMessages si nécessaire.
L'utilisateur va donc avoir un message "le mail est obligatoire blablabla", mais le champ email ne va pas être en erreur, donc pas de feeback utilisateur (css rouge sur le champ) pour visualiser ou est l'erreur au sein du formulaire.
Seule solution à ma connaissance, récupérer l'UiInput de l'email, et faire un setValid(False) dessus, mais ça implique d'avoir ou son id pour le récupérer dans le viewRoot, ou d'avoir un binding du champ vers le controller.

Pour ce use case simple ça passe, malgré le fait que ce ne sois conceptuellement pas génial, mais dans le cadre d'un formulaire avec des dizaines de champs, c'est inconcevable.

J'ai pris le required comme exemple, mais plus globallement ma question est comment faire pour montrer à l'utilisateur quel champ n'est pas valide dans des validations globales et contextuelles, alors que nous sommes aprés la phase PROCESS_VALIDATIONS?

Je ne vois vraiment pas comment faire quelque chose de propre pour répondre à ce problème, si quelqu'un à déjà rencontré cette problématique, merci de partager d’éventuelles solutions