In meinem Bildschirm habe ich ein Dropdown (Auswahlfeld), zur Auswahl einer der Optionen in diesem Dropdown-i angezeigt werden ein oder mehrere Textfelder neben dem Auswahlfeld Javascript/CSS mit - display: none und Anzeige: Block. Alle diese Eingabesteuerelemente haben dieselbe jsf-Form. Jede der Eingabesteuerungen hat ihren eigenen Validator. Das Problem wird Angenommen, der Benutzer option1 vom Auswahlfeld auswählt und nicht Werteingabe oder gibt einen falschen Wert für inputbox1, i eine benutzerdefinierte Facesmessage in dem Validator hinzuzufügen und wird in geeigneter Weise und Angenommen, der Benutzer wählt die option2 gezeigt das zweite Mal und gibt den falschen Wert für die inputbox2 dann ein anderes in der Validierer Facesmessage hinzugefügt wird. Aber Nun sind beide die Nachrichten angezeigt - Mittel - die Nachricht für inputbox1 und inputbox2 - die falsch Meine Vermutung ist, dass dies geschieht, weil sie in der gleichen Form vorliegen und die Instanzen sind noch nicht in der Faces und in der UIView zerstört . Ich beschloss, die Nachrichten auf diese WeiseWie entferne ich FacesMessages vom FacesContext?
Iterator<FacesMessage> msgIterator = FacesContext.getCurrentInstance().getMessages();
while(msgIterator.hasNext())
{
msgIterator.next();
msgIterator.remove();
}
Aber manchmal gibt java.util.NoSuchElementException org.apache.myfaces.shared_impl.renderkit.html.HtmlMessagesRendererBase $
So 2 Fragen MessagesIterator.next zu löschen:
1) Was ist das Problem, die FacesMessages diese Art und Weise in zu löschen? Ich verwende myfaces-api-1.2.3.jar und myfaces-impl-1.2.3.jar
2) Gibt es einen besseren Ansatz mein Szenario zu behandeln? Ich möchte nur relevent Nachrichten wird jedes Mal eine JSF Anfrage
Dank verarbeitet zeigen
Vielen Dank für Ihre Antwort Das Problem war nicht, dass ich die Nachrichten aus dem FacesContext nicht löschen konnte Das Problem war, dass jedes Mal, wenn das Formular gesendet wurde, nur wenige Eingabesteuerelemente vorhanden waren (die nicht mit angezeigt wurden) display: none), die einige Werte beibehalten hat() und so der Validator- und der Backing-Bean-Code die FacesMessages für diese nicht sichtbaren Eingabesteuerelemente im FacesContext hinzugefügt haben. Jetzt, jedes Mal, wenn die Auswahloption geändert wurde, löschte ich die anderen Formularfelder, die nicht notwendig waren, und so wurden die Nachrichten nicht hinzugefügt. Habe ich recht? – gekrish