in my page have some commandButton that open dialog with table . table have 300 row and after close HTML dialog not destroy and persist in HTML page . i want destroy data in dialog after hide. and after click on commandButton repeat action load dialog and load data in dialog . I found this method

<p:ajax event="close" update="growl" listener="#{dialogBean.handleClose}"/>

but not know how can destroy dialog from facescontext.

有帮助吗?

解决方案

Assuming you have the following dialog

<p:dialog id="dialog" widgetVar="dlgVar" dynamic="true" >
  <p:ajax event="close" update="growl" listener="#{dialogBean.handleClose}"
   onstart="PF('dlgVar').content.empty()"/>
</p:dialog>

Button

<p:commandButton value="Button" 
                 onComplete="PF('dlgVar').show()" 
                 update="dialog">

or you can call PF('dlgVar').content.empty() in the onHide of the dialog, if you don't need an ajax request.

<p:dialog id="dialog" widgetVar="dlgVar" 
          dynamic="true"
         onHide="PF('dlgVar').content.empty()">
</p:dialog>

其他提示

I think this can help you.
Suppose you have a commandButton :

<p:commandButton id="button" value="Button" actionListener="#{dialogBean.populateDataTable}" onComplete="yourDialog.show()" update="@form">

Now your <p:dialog> will look like :

<p:dialog  widgetVar="yourDialog" dynamic="true" >
    <p:dataTable value="#{dialogBean.yourList}"..........> ...   </p:dataTable>
</p:dialog>

You have to populate dataTable's data in your actionlistaner. As your <p:dataTable> takes yourList of dialogBean, then fetch data of variable yourList from DB.

public void populateDataTable(ActionEvent event) {
    //Populate data here to be shown in `<p:dataTable>` inside `<p:dialog>`
    //yourList = new ArrayList<yourObject>();
    //allresult = fetchdataFromDB();
    //yourList.addAll(allresult);
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top