p:dataTable在Dialog close上没有显示数据库中的更新记录

时间:2015-05-24 16:43:33

标签: ajax jsf primefaces datatable dialog

关闭dataTable时,我需要您帮助刷新Dialog组件。我尝试了很多方法刷新dataTable,但它没有检索更新的记录,除非我通过单击地址栏中URL旁边的“Go”按钮刷新整个页面。

xhtml代码:

<h:form id="Requests">
<h:panelGroup id="table">
<p:fieldset id="Pendings" legend="Pending Requests">
<div id="refresh">
<p:dataTable id="PendingRequests" var="hr" value="#{hrd.pendingRequests}" paginator="true" rows="15" paginatorTemplate="{RowsPerPageDropdown} {FirstPageLink} {PreviousPageLink} {CurrentPageReport} {NextPageLink} {LastPageLink}" rowsPerPageTemplate="5,10,15" paginatorPosition="bottom" filteredValue="#{hrd.filteredPendingRequests}">

<p:column headerText="Req. Date" sortBy="#{hr.requestDate}" filterMatchMode="contains" filterBy="#{hr.requestDate}" >
<h:outputText value="#{hr.requestDate}"/>
</p:column>
<p:column>
<f:facet name="header">View</f:facet>
<p:commandButton id="submitbutton" update=":Requests:#{hr.dialogueName} "
oncomplete="PF('#{hr.certificateDialogue}').show()" icon="ui-icon-search" title="View">
<f:setPropertyActionListener value="#{hr}" target="#{hrd.selectedRequest}"/>
</p:commandButton>
</p:column>
</p:dataTable>
</div>
</p:fieldset>
</h:panelGroup>
<p:dialog id="CertificateDialog" header="Cert1" widgetVar="CertificateDialog" >
<p:ajax event="close" update=":Requests" listener="#{hrd.UpdateDatatable}"/>
</p:dialog>
</h:form>

我尝试仅更新dataTable,但它没有刷新。虽然,我试图使用@form和@all更新完整的表单,但再次没有刷新dataTable。

updateDataTable方法:

public void UpdateDatatable(CloseEvent event) {

RequestContext.getCurrentInstance().update(":Requests");

}

1 个答案:

答案 0 :(得分:3)

当您尝试使用ManagedBeanRequestContext.update()更新组件时,不应使用相对组件ID,因为您没有任何关联内容。

要解决您的问题,请在收听者:之前删除Requests

RequestContext.getCurrentInstance().update("Requests");

如果您想从托管bean更新组件,请增加内聚力。您可以随时使用p:remoteCommand来自您的javascript调用。

<p:remoteCommand name="updateTable" process="@this" partialSubmit="true" update=":Results" />

您可以通过javascript调用上述remoteCommand,也可以通过对话框调用以下内容:

<p:dialog onhide="updateTable()">
...
</pdialog>

我的建议是将p:dialog移出您放置h:form的{​​{1}}。因为将来如果您遇到需要在dataTable仍然打开时更新h:form的情况,请更新p:dialog所在的h:form,会导致p:dialog对话框突然关闭。

如果您p:dialog p:dialog h:form,那么您可能不需要UpdateDatatable()听众。来自update的{​​{1}}将为您完成工作。