显示更新primefaces对话框
我试图在每次弹出primefaces对话框时更新它。 该对话框由日历字段的更改触发,实际调用是从bean发出的。 当我第一次调用它时,数据很好,但是如果我关闭它并再次打开它,它仍然会显示旧数据。 这有点道理:只渲染一次,然后显示和隐藏,从未实际更新 我想在bean中的dialog.show()之前更新它,但我不知道怎么做。 有什么想法吗显示更新primefaces对话框,primefaces,updates,Primefaces,Updates,我试图在每次弹出primefaces对话框时更新它。 该对话框由日历字段的更改触发,实际调用是从bean发出的。 当我第一次调用它时,数据很好,但是如果我关闭它并再次打开它,它仍然会显示旧数据。 这有点道理:只渲染一次,然后显示和隐藏,从未实际更新 我想在bean中的dialog.show()之前更新它,但我不知道怎么做。 有什么想法吗 <p:dialog site ="sectionDlg" widgetVar ="Dlg"
<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可能因页面结构而异
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中进行(=您定义的是服务器端)之间的区别在于“触发器”的来源