En mi pantalla, tengo un desplegable (seleccionar recuadro), al seleccionar cualquiera de las opciones en ese menú desplegable, visualizo uno o más cuadros de texto al lado del recuadro de selección usando javascript/css - display: none y visualización: bloquear. Todos estos controles de entrada están en la misma forma jsf. Cada uno de los controles de entrada tiene su propio validador. El problema se supone que el usuario selecciona la opción 1 de la caja de selección y no valora la entrada o entradas de un valor incorrecto para inputbox1, agrego un FacesMessage personalizado en el validador y se muestra de manera adecuada y supongamos que el usuario selecciona el opcion2 la segunda vez e ingresa el valor incorrecto para inputbox2 y luego se agrega otro FacesMessage en el validador. Pero Ahora ambos mensajes se muestran - significa - el mensaje para inputbox1 y inputbox2 - que es incorrecto Mi suposición es que esto sucede porque existen en la misma forma y sus instancias no se destruyen aún en FacesContext y en UIView . Decidí eliminar los mensajes de esta maneraCómo eliminar FacesMessages de FacesContext?
Iterator<FacesMessage> msgIterator = FacesContext.getCurrentInstance().getMessages();
while(msgIterator.hasNext())
{
msgIterator.next();
msgIterator.remove();
}
Pero esto a veces da java.util.NoSuchElementException org.apache.myfaces.shared_impl.renderkit.html.HtmlMessagesRendererBase $ MessagesIterator.next
Así que 2 preguntas:
1) ¿Cuál es el problema al eliminar los FacesMessages de esta manera? Estoy usando myfaces-api-1.2.3.jar y myfaces-impl-1.2.3.jar
2) ¿Hay un mejor enfoque para manejar mi escenario? Yo sólo quiero mostrar mensajes relevent cada vez que una petición JSF se procesa
Gracias
Gracias por su respuesta. El problema no fue que no pude eliminar los mensajes de FacesContext. El problema era que cada vez que se enviaba el formulario había pocos controles de entrada (que no se mostraban usando display: none) que conservó algunos valores() y así el código Validators y Backing Bean agregó los FacesMessages para esos controles de entrada no visibles en FacesContext. Ahora, cada vez que se cambiaba la opción de selección, borraba los otros campos de formulario que no eran necesarios y, por lo tanto, no se agregaban los mensajes. ¿Estoy en lo cierto? – gekrish