在我的屏幕上,我有一個下拉菜單(選擇框),在選擇該下拉列表中的任何選項時,我使用javascript/css顯示一個或多個文本框 - display:none和display:塊。所有這些輸入控件都採用相同的jsf格式。每個輸入控件都有自己的驗證器。問題是假設用戶選擇選項1從選擇框和不輸入值或inputbox1輸入一個錯誤的值, i。在驗證添加自定義的FacesMessage並且適當地示出並假設用戶選擇了選項2 第二次輸入錯誤值inputbox2然後在驗證器中添加另一個FacesMessage。但是現在這兩個消息都顯示 - 手段 - inputbox1和inputbox2的消息 - 這是錯誤的我的假設是,這是因爲它們存在相同的形式,它們的實例並沒有在FacesContext和UIView中被銷燬。我決定刪除郵件這種方式如何從FacesContext中移除FacesMessages?
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請求被處理
感謝
感謝您的回答,問題不在於我無法從FacesContext中刪除郵件,問題是每次提交表單時都會有很少的輸入控件(這些輸入控件沒有使用display:none),它保留了一些values(),所以Validators和Backing Bean代碼爲FacesContext中的那些不可見的輸入控件添加了FacesMessages。現在,每次選擇選項已更改,我清除了其他不必要的表單字段,因此不會添加消息。我對嗎? – gekrish 2010-05-27 15:19:49