【发布时间】:2015-05-26 13:54:26
【问题描述】:
我需要您的帮助和指导来解决使用 ajax 刷新表单后显示 dialog 的问题。我有一个dataTable,它显示了许多请求,并且单击commandButton 视图,将显示一个包含一些信息的dialog。在dialog 关闭时,表单将被刷新,dataTable 将从数据库中获取更新的信息。但是第一次会显示对话框并通过关闭dialog 来刷新表单。
如果我第二次尝试再次单击视图commandButton,commandButton 将不会显示任何对话框并且似乎不会执行任何操作。即使是日志也没有显示任何内容。
这是我的 xhtml:
<h:form id="Requests">
<p:dataTable id="PendingRequests" var="hr" value="#{hrd.pendingRequests}"
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>
<p:dialog id="CertificateDialog" header="Cert1" widgetVar="CertificateDialog">
<p:ajax event="close" update=":Requests" listener="#{hrd.UpdateDatatable}" />
</p:dialog>
</h:form>
该方法会在dialog的关闭时调用。UpdateDatatable方法代码为:
listPendingRequests.clear();
listPendingRequests = new ArrayList<PendingRequests>();
PreparedStatement ps = null;
String sql = "";
try {
con = DBConn.getInstance().getConnection("jdbc/hr");
// SQL Statement
ps = con.prepareStatement(sql);
ResultSet result = ps.executeQuery();
while (result.next()) {
PendingRequests pendingList = new PendingRequests();
requestDate = result.getString("REQ_DT");
pendingList.setRequestDate(requestDate);
listPendingRequests.add(pendingList);
RequestContext.getCurrentInstance().update("Requests");
}
} catch (Exception e) {
System.err.print(e);
e.printStackTrace();
}
【问题讨论】:
标签: ajax jsf primefaces