显示更新primefaces对话框

显示更新primefaces对话框,primefaces,updates,Primefaces,Updates,我试图在每次弹出primefaces对话框时更新它。 该对话框由日历字段的更改触发,实际调用是从bean发出的。 当我第一次调用它时,数据很好,但是如果我关闭它并再次打开它,它仍然会显示旧数据。 这有点道理:只渲染一次,然后显示和隐藏,从未实际更新 我想在bean中的dialog.show()之前更新它,但我不知道怎么做。 有什么想法吗 <p:dialog site ="sectionDlg" widgetVar ="Dlg"

我试图在每次弹出primefaces对话框时更新它。 该对话框由日历字段的更改触发,实际调用是从bean发出的。 当我第一次调用它时,数据很好,但是如果我关闭它并再次打开它,它仍然会显示旧数据。 这有点道理:只渲染一次,然后显示和隐藏,从未实际更新

我想在bean中的dialog.show()之前更新它,但我不知道怎么做。 有什么想法吗

<p:dialog
        site        ="sectionDlg"
        widgetVar   ="Dlg"
        minWidth    ="430"
        modal       ="true"
        closable    ="true"
        resizable   ="false"
        dynamic     ="true"
        width="450" height="300"
>


<h:form id="Form">
    <br/>
    <p:panelGrid id ="dates" styleClass="cmt-no-grid-100perc" columns="4">
    <calendar        attribName ="offerStartDateDlg"
                                value       ="#{bean.startDate}"
                                writable    ="#{false}"/>                           

    <calendar        attribName="offerEndDateDlg"
                                value="#{bean.endDate}"
                                writable="#{false}"/>
    </p:panelGrid>
    <div align="center">
        <p:commandButton
            onclick ="PF('whichSectionDlg').hide()"
            >
        </p:commandButton>
        <p:commandButton
            onclick ="PF('whichSectionDlg').hide()">
        </p:commandButton>
    </div>
</h:form>



这会使事情变得更简单

一些你已经拥有的代码总是很有用的。但是,根据触发对话框显示的内容,您可以:

  • 向触发链接/按钮/任何内容添加
    更新
  • 通过对话框本身启动更新,如下所示

你的内容在这里
请注意:

  • 您需要
    remoteCommand
    驻留在
    h:form
  • 您应该始终更新对话框内容,而不是对话框本身
  • 客户端id可能因页面结构而异

好吧,我设法弄明白了

我通过在调用之前从bean中更新它来解决这个问题

public void show_dlg_method(){
    RequestContext.getCurrentInstance().update("Dlg");
    RequestContext.getCurrentInstance().execute("PF('Dlg').show()");
}

“Dlg”是widgetVar属性值。

我添加了一些代码!那么RequestContext.getCurrentInstance()更新(表单id)呢;在RequestContext.getCurrentInstance().execute(“PF('whichSectionDlg').show()”)之前;?能用吗?嗯。。。但是,您可以在启动操作的组件上使用“update”和“oncomplete”属性。不需要在服务器端代码中“隐藏”它。是的,但我应该在ajax更新部分中这样做。我发现这样做更容易,而不必找到对话框的路径。uuhhh如果你能做
update(“Dlg”)
从服务器端,您可以从xhtml执行
更新=“:Dlg”
。来自服务器端的路径始终是绝对路径,但您也可以通过在前面添加一个
来从客户端执行此操作。。。没有区别。如果可能的话(在本例中是xhtml),将事情放在一起始终是更好的选择。@Kukeltje确实也可以从客户端完成,但在使用
RequestContext.getCurrentInstance().execute(“PF('Dlg').show()”)从服务器端显示弹出窗口的场景中,您会怎么做。。。。现在,因为它是由服务器端驱动的,所以我猜更新弹出窗口也必须从服务器端进行,不是吗?不是,不是特别的。实际上,更新总是在服务器上完成的(从jsf组件到html的呈现就是在服务器上完成的)。来自xhtml的
update=…
与在bean中进行(=您定义的是服务器端)之间的区别在于“触发器”的来源