Dans mon écran, j'ai une liste déroulante (boîte de sélection), sur la sélection de l'une des options dans cette liste déroulante, j'affiche une ou plusieurs zones de texte à côté de la boîte de sélection en utilisant javascript/css-display: bloc. Tous ces contrôles d'entrée sont dans la même forme jsf. Chacun des contrôles d'entrée possède son propre validateur. Le problème est supposé que l'utilisateur sélectionne option1 de la boîte de sélection et n'a pas valeur d'entrée ou les entrées d'une valeur incorrecte pour inputbox1, ajouter une FacesMessage personnalisée dans le validateur et est représentée de manière appropriée et supposons que l'utilisateur sélectionne le option2 la deuxième fois et entre la mauvaise valeur pour le inputbox2 puis un autre FacesMessage est ajouté dans le validateur. Mais Maintenant les deux messages sont montrés - signifie - le message pour inputbox1 et inputbox2 - ce qui est faux Mon hypothèse est que cela se produit parce qu'ils existent sous la même forme et leurs instances ne sont pas encore détruites dans le FacesContext et dans le UIView . J'ai décidé de supprimer les messages de cette façonComment supprimer FacesMessages du FacesContext?
Iterator<FacesMessage> msgIterator = FacesContext.getCurrentInstance().getMessages();
while(msgIterator.hasNext())
{
msgIterator.next();
msgIterator.remove();
}
Mais cela donne parfois java.util.NoSuchElementException org.apache.myfaces.shared_impl.renderkit.html.HtmlMessagesRendererBase $ MessagesIterator.next
donc 2 questions:
1) Quel est le problème de la suppression des FacesMessages de cette façon? J'utilise myfaces-api-1.2.3.jar et myfaces-impl-1.2.3.jar
2) Y a-t-il une meilleure approche pour gérer mon scénario? Je ne veux afficher les messages relevent chaque fois qu'une demande est traitée jsf
Merci
Merci pour votre réponse.Le problème n'était pas que je ne pouvais pas supprimer les messages du FacesContext.Le problème était que chaque fois que le formulaire a été soumis il y avait peu de contrôles d'entrée (qui n'étaient pas affichés en utilisant display: none) qui a conservé certaines valeurs() et ainsi le code Validators et Backing Bean a ajouté les FacesMessages pour ces contrôles d'entrée non visibles dans le FacesContext. Maintenant, chaque fois que l'option de sélection a été modifiée, j'ai effacé les autres champs de formulaire qui n'étaient pas nécessaires et donc les messages ne sont pas ajoutés. Ai-je raison? – gekrish