Comment activer le rafraîchissement des composants à partir de javascript dans primefaces?

est-il possible de mettre à jour un composant PrimeFaces à partir de javascript pour qu'il soit forcé de se rafraîchir?

je fais un appel de sauvegarde ajax en utilisant ce bouton dans une boîte de dialogue. J'ai joint mon javascript personnalisé sur l'événement complet.

<p:growl life="1500" id="showmessage"/>
<p:dialog id="addMemberDialog" widgetVar="addMemberDlg">
    <!-- More Code -->
    <p:commandButton value="Save"
        actionListener="#{memberManagedBean.save}"
        oncomplete="handleSaveNewMember(xhr, status, args)"
        update=":memberListForm:membersTable createupdateform "
        process="@form" />
</p:dialog>

..pendant le bouton Enregistrer, j'ajoute un message ici pour l'afficher au client en utilisant le composant growl.

public void save(ActionEvent event) {
    FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO,
            "Successfuly Add user", "Successfuly Add user");
    FacesContext.getCurrentInstance().addMessage(null, message);

}

mon problème est, Comment puis-je séquencer L'UI de telle sorte que, je devrais cacher la boîte de dialogue en premier avant que le grognement ne montre la pâture?

function handleSaveNewMember(xhr, status, args) {
    addMemberDlg.hide();
    //update the growl after the dialog was hidden?
}

ce qui se passe, c'est que le composant growl s'affiche en même temps que la boîte de dialogue.

Merci.

22
demandé sur Mark Estrada 2012-05-17 13:15:54
la source

5 ответов

Vous pouvez utiliser PrimeFaces' <p:remoteCommand> pour cela.

<p:remoteCommand name="updateGrowl" update="showmessage" />

qui doit être invoqué comme

<p:commandButton ... oncomplete="addMemberDlg.hide(); updateGrowl();" />

ce cas particulier il y a cependant un moyen plus simple. Définissez autoUpdate l'attribut <p:growl>true.

<p:growl autoUpdate="true" life="1500" id="showmessage"/>

il se mettra automatiquement à jour sur chaque requête ajax. Si votre composant ne l'a pas supporté, alors vous pouvez toujours l'envelopper dans un <p:outputPanel> qui soutient aussi que attribut.

<p:outputPanel autoUpdate="true">
    ...
</p:outputPanel>
45
répondu BalusC 2014-10-06 17:56:49
la source

Vous pouvez toujours faire quelque chose comme ceci (supprimer l'id showmessage de votre attribut save button update)

<h:commandButton style="display:none" id="myBtn" >
    <f:ajax render=":showmessage"/>
</h:commandButton>

function handleSaveNewMember(xhr, status, args) {
    ...
    jQuery("#myBtn").click();
}

EDIT Mais de toute façon dans votre code actuel , le dialogue n'est-il pas fermé en même temps que la mise à jour du grwol ?

4
répondu Daniel 2012-05-17 13:55:49
la source

Mon conseil:

  1. Utiliser <p:remoteCommand> avec un actionListener l'attribut. Cet attribut invoque une méthode de la fève de soutien qui contient FacesContext.addMessage code, comme ceci: <p:remoteCommand actionListener="myBean.testMethod()" />
  2. Ensuite, dans votre handleSaveNewMember script, invoquer l' remoteCommandname l'attribut après addMemberDlg.hide(); comme ceci: <p:remoteCommand name="testScript" actionListener="myBean.testMethod()"/>. Alors, function handleSaveNewMember(xhr, status, args) { addMemberDlg.hide(); testScript(); }
  3. Ajouter update l'attribut remoteCommand pointing grognement component:<p:remoteCommand name="testScript" actionListener="myBean.testMethod()" update="showmessage" />
  4. commandButton is OK.

Cela a fonctionné pour je.

Salutations.

2
répondu rodcruzh 2014-02-08 00:07:28
la source

pourquoi ne pouvez-vous pas mettre P:Dialog à l'intérieur de < H:panelGroup >. comme

< h:panelGroup id="addUser" rendered = "boolean value " >
    < p:dialog id="addMemberDialog" widgetVar="addMemberDlg" >
        <!-- More Code -->
        < p:commandButton value="Save" actionListener="#{memberManagedBean.createOrUpdate}"
                oncomplete="handleSaveNewMember(xhr, status, args)"
                update=":memberListForm:membersTable createupdateform :showmessage :addUser"
                process="@form" />
    < /p:dialog >
< /h:panelGroup>

valeur booléenne qui doit être mis dans votre méthode de sauvegarde. en définissant ceci comme false dans votre méthode de sauvegarde, il ne s'affichera pas lors de sa mise à jour. Donc le message grognement seul s'affichera. Mais avant d'appeler cette méthode enregistrer cette valeur booléenne définie sur true.

0
répondu Thirumurthy 2012-05-17 14:55:38
la source

vous pouvez utiliser un élément PrimeFaces appelé P: remotecommand. Cet élément exécutera une action (pour appeler une méthode bean, par exemple) et exécutera une mise à jour après cette action.

Il y a un exemple dans ce post http://devdublog.blogspot.com/2015/04/best-way-for-calling-method-of.html.

0
répondu Gaalvarez 2015-04-23 22:05:36
la source

Autres questions sur jsf jsf-2 primefaces