Comment supprimer FacesMessages du FacesContext?
Dans mon écran, j'ai une liste déroulante(select case), sur la sélection de l'une des options du menu déroulant , j'ai l'affichage de l'un ou de plusieurs zones de texte à côté de la boîte de sélection à l'aide de javascript/css display:none et display:block. Tous ces contrôles de saisie sont dans le même jsf forme. Chacun des contrôles de saisie ont leur propre programme de validation. Le problème est supposons que l'utilisateur sélectionne option1 à partir de la sélection de la boîte et n'a pas valeur d'entrée ou les entrées d'une valeur erronée pour inputbox1, je ajouter un FacesMessage dans le Validateur et est illustré de façon appropriée et supposons que l'utilisateur sélectionne le option2 la deuxième fois et des intrants, la valeur incorrecte pour le inputbox2 puis un autre FacesMessage est ajouté dans le programme de validation. Mais Maintenant à la fois les Messages sont affichés - les moyens - le message pour inputbox1 et inputbox2 - ce qui est faux Mon hypothèse est que , ce qui se passe parce qu'ils existent dans la même forme et de leurs instances ne sont pas détruits mais dans le FacesContext et dans le UIView. J'ai décidé de supprimer les messages de cette façon
Iterator<FacesMessage> msgIterator = FacesContext.getCurrentInstance().getMessages();
while(msgIterator.hasNext())
{
msgIterator.next();
msgIterator.remove();
}
Mais cela donne parfois de java.util.NoSuchElementException org.apache.myfaces.shared_impl.renderkit.html.HtmlMessagesRendererBase$MessagesIterator.prochaine
Donc 2 questions :
1) Quel est le problème de la suppression de la FacesMessages de cette façon? Je suis à l'aide de myfaces-api-1.2.3.jar et myfaces-impl-1.2.3.jar
2) Est-il une meilleure approche pour gérer mon scénario? Je veux seulement montrer corporation de messages à chaque fois qu'un jsf demande est traitée
Grâce
source d'informationauteur gekrish
Vous devez vous connecter pour publier un commentaire.
Aussi loin que je peux dire que ce n'est pas suffisant, car dans
(version 2.0.15, de révision: 1364593), il y a 2 listes de messages (
_orderedMessages
et_messages
) et votre méthode n'efface_orderedMessages
.Pour effacer
_messages
ce faire:Veuillez également noter que c'est très fragile, car elle s'appuie sur les détails d'implémentation, mais je ne pouvais pas trouver un meilleur moyen 🙁
Le problème n'est pas que je n'étais pas en mesure de supprimer les messages de la FacesContext. Le problème est que chaque fois que le formulaire a été soumis il y avait peu de contrôles de saisie (qui ne sont pas affichées à l'aide de display:none ), qui a conservé certaines valeurs () et donc les Validateurs et les Backing Bean code ajouté le FacesMessages pour les personnes non-visible des contrôles d'entrée dans le FacesContext. Maintenant, à chaque fois que l'sélectionnez l'option a été changé, j'ai effacé les autres champs du formulaire qui n'étaient pas nécessaires et si les messages ne sont pas ajoutés.
Je n'utilise pas MyFaces, donc je ne peux pas aller dans les détails à ce sujet, mais dans le Soleil RI (Mojarra) le bug de unremoveable facesmessages a été corrigé dans la version 1.2_07 environ 1,5 ans.
Afin d'obtenir ce que vous voulez, essayez de mettre à niveau MyFaces à la dernière version disponible (ils auraient corrigé le bug ainsi) ou de le remplacer par Mojarra.