Nel mio schermo, ho un menu a discesa (casella di selezione), sulla selezione di una qualsiasi delle opzioni in questo menu a discesa, visualizzo una o più caselle di testo accanto alla casella di selezione utilizzando javascript/css - display: none e display: bloccare. Tutti questi controlli di input sono nella stessa forma jsf. Ciascuno dei controlli di input ha il proprio validatore. Il problema si supponga che l'utente seleziona opzione1 dalla casella di selezione e non fa valore di ingresso o inserisce un valore errato per inputbox1, aggiungo un FacesMessage personalizzato nel Validator e viene mostrato in modo appropriato e supponiamo l'utente seleziona il opzione2 la seconda volta e immette il valore errato per la casella di input quindi un altro FacesMessage viene aggiunto nel validatore. Ma Ora vengono visualizzati entrambi i messaggi - significa - il messaggio per inputbox1 e inputbox2 - che è sbagliato La mia ipotesi è che ciò avvenga perché esistono nella stessa forma e le loro istanze non sono ancora distrutte in FacesContext e nella UIView . Ho deciso di cancellare i messaggi in questo modoCome rimuovere FacesMessages da FacesContext?
Iterator<FacesMessage> msgIterator = FacesContext.getCurrentInstance().getMessages();
while(msgIterator.hasNext())
{
msgIterator.next();
msgIterator.remove();
}
Ma questo a volte dà java.util.NoSuchElementException org.apache.myfaces.shared_impl.renderkit.html.HtmlMessagesRendererBase $ MessagesIterator.next
Quindi 2 domande:
1) Qual è il problema nell'eliminazione di FacesMessages in questo modo? Sto usando myfaces-api-1.2.3.jar e myfaces-impl-1.2.3.jar
2) Esiste un approccio migliore per gestire il mio scenario? Voglio solo mostrare i messaggi pertinenti ripresi ogni volta che una richiesta JSF viene elaborato
Grazie
Grazie per la risposta.Il problema non era che non ero in grado di eliminare i messaggi da FacesContext.Il problema era che ogni volta che il modulo è stato inviato c'erano pochi controlli di input (che non venivano visualizzati usando display: none) che ha mantenuto alcuni valori() e quindi il codice Validators e Backing Bean ha aggiunto FacesMessages per quei controlli di input non visibili in FacesContext. Ora, ogni volta che l'opzione select è stata cambiata, ho cancellato gli altri campi del modulo che non erano necessari e quindi i messaggi non sono stati aggiunti. Ho ragione? – gekrish