На моем экране у меня есть раскрывающийся список (выбрать поле), при выборе любого из вариантов в этом раскрывающемся списке, я показываю одно или несколько текстовых полей рядом с полем выбора, используя javascript/css - display: none и display: блок. Все эти элементы ввода находятся в одной и той же форме jsf. Каждый из элементов управления ввода имеет свой собственный валидатор. Проблема заключается в том, что пользователь выбирает параметр1 из поля выбора и не вводит значение или вводит неправильное значение для inputbox1, я добавляю пользовательский FacesMessage в Validator и отображается соответствующим образом, и предположим, что пользователь второй раз выбирает опцию2 и вводит неправильное значение для inputbox2, то в валидаторе добавляется еще один FacesMessage. Но Теперь обе сообщения отображаются - означает - сообщение для inputbox1 и inputbox2 - что неверно. Мое предположение состоит в том, что это происходит потому, что они существуют в одной и той же форме, и их экземпляры еще не уничтожены в FacesContext и в UIView. Я решил удалить сообщения таким образом
Iterator<FacesMessage> msgIterator = FacesContext.getCurrentInstance().getMessages();
while(msgIterator.hasNext())
{
msgIterator.next();
msgIterator.remove();
}
Но это иногда дает java.util.NoSuchElementException org.apache.myfaces.shared_impl.renderkit.html.HtmlMessagesRendererBase $MessagesIterator.next
Итак, 2 вопроса:
1) В чем проблема при удалении FacesMessages таким образом? Я использую myfaces-api-1.2.3.jar и myfaces-impl-1.2.3.jar
2) Есть ли лучший подход для обработки моего сценария? Я хочу показывать релевантные сообщения каждый раз, когда обрабатывается запрос jsf.
Спасибо