[PrimeFaces] evenement dans commandButton
Bonjour,
j'ai un problème, probablement de conception, lors de l'appel d'un commandButton.
Ce bouton permet, par l'intermédiaire d'un inputText à l'utilisateur de lancer une recherche. En gros ce que je souhaite faire. Quand l'utilisateur a saisi son texte et cliqué sur le bouton, la recherche va se lancer. Cette recherche est une requette SQL sur ma base de donnée. Suivant si elle trouve ou non un resultat, je stock dans une variable un message. Une fois finie elle va me mettre à jour un panelGroup dans ma page qui lui pourra afficher le résultat.
Dans un second temps, je voudrais afficher le message.
Le code de mon bouton est le suivant :
Code:
1 2 3 4 5 6 7
|
<p:messages id="message" showDetail="true" autoUpdate="true" closable="true" />
<h:panelGrid id="num1" columns="3" cellspacing="10" style="float:right;">
<h:outputLabel for="name" value="SID / Pays :" style="font-weight:bold"/>
<p:inputText id="name" value="#{rechercheBean.nom}" />
<p:commandButton id="btn" value="Rechercher" update="display" actionListener="#{rechercheBean.addInfo}"/>
</h:panelGrid> |
Le code qui est mis à jour sur ma page :
Code:
1 2 3 4 5 6
|
<h:panelGroup id="display">
<ui:repeat var="inst" value="#{rechercheBean.rechercher()}">
...
</ui:repeat>
</h:panelGroup> |
Ce code n'a pas grand interet si ce n'est que finalement c'est lui qui lance la requette SQL et qui la traite, et non le click sur le bouton...
Le code de mon bean :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
@ManagedBean
@ViewScoped
public class RechercheBean implements Serializable
{
private int info;
...
public void addInfo(ActionEvent actionEvent)
{
if (info == 1)
{
FacesContext.getCurrentInstance().addMessage("message", new FacesMessage(FacesMessage.SEVERITY_INFO,"Test", "Pas de résultats"));
}
else if (info == 2)
{
FacesContext.getCurrentInstance().addMessage("message", new FacesMessage(FacesMessage.SEVERITY_FATAL,"Nombre de caractères insuffisants", "Entrez au minimum 3 caractères"));
}
}
} |
Je ne vous met pas la fonction recherche, je ne pense pas qu'elle ai un grand interet...
Ce code fonctionne très bien si ce n'est que l'update est exécuté après l'actionListener. Et moi je voudrais que ce sois l'inverse. Dans mon update je lance ma recherche, j'actualise ma portion de page, et j'associe une valeur à ma variable info (correspondant au message que je veux afficher). Et ensuite je voudrais pouvoir afficher le message correspondant.
Actuellement si je clic une fois : ma page s'actualise nickel, mais aucun message n'apparait.
Je clic une seconde fois, le message correspondant à ma 1ere action apparait.
Et si je continu j'ai toujours un décalage entre le message correspondant à l'ancienne page affichée, et la nouvelle page.
J'ai vu sur un forum que c'était normal que l'update est toujours exécuté après l'actionListener. Mais vu comment j'ai codé je vois pas trop comment y toucher pour avoir le résultat attendu...
Si quelqu'un à une idée... Merci beaucoup