Trong màn hình, tôi có một menu thả xuống (chọn hộp), khi chọn bất kỳ tùy chọn nào trong menu thả xuống, tôi hiển thị một hoặc nhiều hộp văn bản bên cạnh hộp chọn bằng cách sử dụng javascript/css - display: none và display: khối. Tất cả các điều khiển đầu vào này đều có cùng dạng jsf. Mỗi điều khiển đầu vào đều có trình xác thực riêng của chúng. Vấn đề là giả sử người dùng chọn tùy chọn1 từ hộp lựa chọn và không nhập giá trị hoặc nhập sai giá trị cho inputbox1, i thêm FacesMessage tùy chỉnh trong Trình xác thực và được hiển thị thích hợp và giả sử người dùng chọn tùy chọn lần thứ hai và nhập sai giá trị cho inputbox2 khi đó một FacesMessage khác được thêm vào trình xác thực. Nhưng Bây giờ cả hai Tin nhắn được hiển thị - có nghĩa là - thông báo cho inputbox1 và inputbox2 - đó là sai Giả định của tôi là, điều này xảy ra vì chúng tồn tại trong cùng một biểu mẫu và các cá thể của chúng chưa bị hủy trong FacesContext và trong UIView . Tôi đã quyết định xóa các thông điệp theo cách nàyLàm thế nào để loại bỏ FacesMessages khỏi FacesContext?
Iterator<FacesMessage> msgIterator = FacesContext.getCurrentInstance().getMessages();
while(msgIterator.hasNext())
{
msgIterator.next();
msgIterator.remove();
}
Nhưng điều này đôi khi mang lại cho java.util.NoSuchElementException org.apache.myfaces.shared_impl.renderkit.html.HtmlMessagesRendererBase $ MessagesIterator.next
Vì vậy, 2 câu hỏi:
1) Sự cố khi xóa FacesMessages theo cách này là gì? Tôi đang sử dụng myfaces-api-1.2.3.jar và myfaces-impl-1.2.3.jar
2) Có cách tiếp cận tốt hơn để xử lý kịch bản của tôi không? Tôi chỉ muốn hiển thị các thông điệp có liên quan mỗi khi một yêu cầu JSF được xử lý
Cảm ơn
Cảm ơn câu trả lời của bạn Vấn đề là không phải lúc nào tôi cũng có thể xóa các tin nhắn từ FacesContext. display: none) giữ lại một số giá trị() và vì vậy các Validator và Backing Bean đã bổ sung thêm FacesMessages cho các điều khiển đầu vào không nhìn thấy được trong FacesContext. Bây giờ, mọi tùy chọn chọn đã được thay đổi, tôi đã xóa các trường biểu mẫu khác không cần thiết và do đó các tin nhắn không được thêm vào. Tôi có đúng không? – gekrish