【发布时间】:2013-05-09 11:34:51
【问题描述】:
在 primefaces 中,我有一个确认对话框,当我确认删除按钮时,我在数据库中的行被删除,但页面没有更新。我是否缺少不更新页面的内容。我的对话框定义如下。
<h:form id="searchForm">
<p:commandButton id="showDialogButton" value="Delete Data" onclick="confirmation.show()"
style="margin:20px" type="button" immediate="true" />
<p:confirmDialog id="confirmDialog" message="Are you sure you want to delete all the data for this submission?"
header="Initiating delete process" severity="alert" widgetVar="confirmation">
<p:commandButton id="confirm" value="Yes Sure" update=":searchForm:rowDataTable" oncomplete="confirmation.hide()"
actionListener="#{myDataBean.deleteData}" immediate="true" ajax="true"/>
<p:commandButton id="decline" value="Not Yet" onclick="confirmation.hide()" type="button" immediate="true"/>
</p:confirmDialog>
我用同样的形式定义了一个数据表
<p:dataTable var="row"
value="#{myDataBean.entries}"
id="rowDataTable" paginator="true"
rows="30"
paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
rowsPerPageTemplate="10,20,30"
>
里面有一个显示所有数据的子表
<p:subTable id="rowSubTable" var="details" value="#{row.data}">
在我的 bean 中,我有以下动作监听器。动作侦听器完成后,由于我定义了预渲染视图事件,它会调用加载初始视图方法来重新加载数据。
public List<SubmissionRow> entries = new ArrayList<SubmissionRow>();
public void loadInitialView() {
if (!postback) {
List<Submission> data = loadData();
//sort data and build entries list
}
}
@Transactional
public void deleteData(ActionEvent actionEvent) {
submission.deleteRows(submissionBean.getSubmission());
entries.clear();
postback = false;
}
【问题讨论】:
-
在调用 loadData() 后,您是否进行了调试以检查数据数组是否不包含已删除的行?为什么要使用事务注释?提交属性是一个EJB?还是什么?
-
是的,我的条目是空的,因为我在 db 调用返回时将其清除。是的,提交是一个 jpa 实体,因此使用事务性。
-
抱歉刚刚重新阅读我的答案,是的,在 loadData 调用后数据数组为空。
-
所以 bean 包含正确的数据,但它没有反映在数据表上?如果客户端有任何错误,您是否检查了萤火虫? ajax 响应正常吗?
标签: jsf-2 primefaces datatable