Tengo un problema con la validación de un <p:inputText>
y la actualización de su contenido.La actualización de Primefaces JSF después de la validación falló no funciona
Básicamente, cuando la validación de inputText falla, nunca se actualiza de nuevo.
Aquí está un ejemplo sencillo para aclarar:
El Facelet:
!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui">
<h:head>
</h:head>
<body>
<h1>Test</h1>
<h:form id="list" prependId="false">
<ul>
<li>Element 1 
<p:commandLink action="#{Test.assignElement}" update="detail_value">
<f:setPropertyActionListener target="#{Test.currentElement}" value="1" />
Assign
</p:commandLink>
</li>
<li>Element 2 
<p:commandLink action="#{Test.assignElement}" update="detail_value">
<f:setPropertyActionListener target="#{Test.currentElement}" value="2" />
Assign
</p:commandLink>
</li>
</ul>
</h:form>
<h:form id="detail" prependId="false">
<p:inputText value="#{Test.element}" id="detail_value" required="true" styleClass="#{Faces.messagesFor['detail_value'] ? 'border:1px solid red' : ''}">
<p:ajax event="blur" update="detail_value"></p:ajax>
</p:inputText>
</h:form>
</body>
</html>
El grano de la prueba:
package com.easydevel.test;
public class Test {
private String currentElement;
private String element;
public String getCurrentElement() {
return currentElement;
}
public void setCurrentElement(String currentElement) {
this.currentElement = currentElement;
}
public String getElement() {
return element;
}
public void setElement(String element) {
this.element = element;
}
public String assignElement(){
setElement(getCurrentElement());
return "";
}
}
Si hace clic en los commandLinks por debajo del "elemento" s la entrada el campo se actualiza, pero cuando falla una validación (simplemente deje el texto de entrada en blanco y haga clic en cualquier otra parte de la página), el borde de la entrada se vuelve rojo. Después de eso, nunca se actualiza de nuevo al hacer clic en los commandLinks mencionados anteriormente.
¿Alguna idea?