JSF Primefaces mise à jour après l'échec de la validation ne fonctionne pas
J'ai un problème avec la validation d'un <p:inputText>
et la mise à jour de son contenu.
Essentiellement lorsque le inputText de la validation échoue, il n'est jamais mis à jour à nouveau.
Voici un exemple simple pour clarifier:
La 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>
Le Test bean:
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 vous cliquez sur le commandLinks en dessous de la "Élément"s le champ de saisie est mise à jour, mais lors de la validation échoue (il suffit de laisser le texte de saisie vide, et cliquez sur une autre partie de la page), la frontière de l'entrée s'allume en rouge. Après cela, il n'est jamais mis à jour à nouveau en cliquant sur le mentionnés ci-dessus commandLinks.
Des idées?
OriginalL'auteur TinGinard | 2011-12-30
Vous devez vous connecter pour publier un commentaire.
Arjan tijms réponse œuvres, toutefois, la meilleure des solutions que j'ai trouvé sont:
Utilisation Omnifaces Solution
Ainsi, au lieu de la mise en œuvre de l'auditeur votre auto tout ce que vous avez besoin est juste une ligne de code simple.
Si vous utilisez Primefaces vous pouvez utiliser resetInput composant:
OriginalL'auteur Samy Omar
C'est le fameux cas de la saisie d'éléments' (
EditableValueHolder
s) qu'une fois que la validation a échoué pour eux ne peut jamais être de nouveau mis à jour via AJAX re-rendu.Voir:
Une solution de contournement consiste à créer une action de l'auditeur qui réinitialise les composants qui doivent être re-rendus. Voir la dernière page de ce: http://community.jboss.org/message/620000
Si ce comportement vous dérange (je suppose que c'est le cas), alors s'il vous plaît n'hésitez pas à voter pour JAVASERVERFACES_SPEC_PUBLIC-1060 et si possible laisser un commentaire raconter ce qui vous attend et pourquoi.
OriginalL'auteur Arjan Tijms
Je vais répondre moi-même.
Basée sur les liens fournis par Arjan, je développe la actionListener pour nettoyer les éléments du formulaire. et Il fonctionne.
LA FACELET:
Et l'AUDITEUR....
OriginalL'auteur TinGinard