1

我有这个对话框:

<p:dialog  header="Commande editée le #{acceuilUserController.selectedMajCommande.dateMaj} par l'#{acceuilUserController.selectedMajCommande.utilisateur.type} #{acceuilUserController.selectedMajCommande.utilisateur.nom} #{acceuilUserController.selectedMajCommande.utilisateur.prenom}" widgetVar="carDialog" resizable="false" id="carDlg"  
                     update="cars" showEffect="fade" hideEffect="explode" modal="true"> 

它在用户单击数据表下方的按钮时显示:

<p:column style="width:40px">                         
                        <p:commandButton  id="selectButton" action="#{acceuilUserController.refresh()}" update=":form:carDlg" oncomplete="carDialog.show()" icon="ui-icon-search" title="plus de détails">  
                            <f:setPropertyActionListener value="#{car}" target="#{acceuilUserController.selectedMajCommande}" />  
                        </p:commandButton>                       
                    </p:column> 

我希望当用户关闭 tis 对话框时,将执行以下方法:

public String refresh(){
    this.selectedMajCommande.setLu(true);
    System.out.println("je suis la alors : "+this.selectedMajCommande.isLu());
    hch.updateCommandeMaj(selectedMajCommande);
    return "acceuil";
}

它允许将数据刷新到数据表中,我成功地使用对话框中的一个按钮来做到这一点,如下所示:

 <p:commandButton id="confirm" value="fermer" update="cars" oncomplete="carDialog.hide()"
                                     action="#{acceuilUserController.refresh()}" />

但我只想在关闭对话框时这样做,不需要框中的这个按钮

这是我要刷新的数据表:

<p:dataTable id="cars" var="car" value="#{acceuilUserController.lc_maj}"  tableStyle="width:auto" rowStyleClass="#{(car.lu == false) ? 'red' : null}" >  

                    <p:column headerText="Commande N° : " style="width:100px">  
                        <h:outputText value="#{car.commande.id}" />  
                    </p:column>  

                    <p:column headerText="Date de mise à jour : " style="width:100px">  
                        <h:outputText value="#{car.dateMaj}" />  
                    </p:column> 

                    <p:column headerText="Decision : " style="width:100px">  
                        <h:outputText value="#{car.decison}" />  
                    </p:column> 

                    <p:column headerText="Etat : " style="width:100px">  
                        <h:outputText value="#{car.etat}" />  
                    </p:column> 

                    <p:column style="width:40px">                         
                        <p:commandButton  id="selectButton" action="#{acceuilUserController.refresh()}" update=":form:carDlg" oncomplete="carDialog.show()" icon="ui-icon-search" title="plus de détails">  
                            <f:setPropertyActionListener value="#{car}" target="#{acceuilUserController.selectedMajCommande}" />  
                        </p:commandButton>                       
                    </p:column> 

                </p:dataTable>        

怎么能做到这一点,提前谢谢

4

2 回答 2

0

这可以使用 jQuery 来绑定单击事件,从而调用 PrimeFaces commandButton 组件的单击事件,该组件已配置为部分处理和更新您选择的组件。我做了类似的事情,把这个脚本放在一个复合组件中,放在我所有的对话框之外,但当然有很多方法可以做到这一点。

jQuery(document).ready(function() {
    // Searching for naming container that contains my dialog...
    var dashboardPanel = jQuery('*[id*=#{cc.attrs.id}]');
    // Find the dialog closer button by its unique class
    var closerButton = dashboardPanel.children().find('.ui-dialog-titlebar-close');
    closerButtons.bind('click', function(event) {
        // Use set timeout to delay the event if you want to see close animation effect
        setTimeout(function() { //Some logic to find the button client id
            var menuItemId = 'view#{cc.attrs.id}'.replace('Panel', '');
            jQuery('#' + menuItemId).click();
        }, 400);
    });
});

当然,如果您没有带有动态 id 的 commandButton 或者它不在重复容器中,那么直接在 Javascript 中通过它的widgetVar.

commandButtonWidget.jq.click();
于 2012-08-23T11:56:38.337 回答
0

你应该RequestContext这样更新:

public void update() {
   RequestContext requestContext = RequestContext.getCurrentInstance();
   requestContext.update("form:cars");
}
于 2013-10-26T14:07:19.630 回答