【发布时间】:2010-10-18 12:49:05
【问题描述】:
我 - 不幸的是 - 与 jsf 合作,我遇到了问题。
我有一个 jsf 页面,它使用 <h:dataTable> 组件显示包含一些数据的表格。
此表的每一行都有一个 <h:commandLink> 和一个删除操作以删除该行中的项目。
当我执行该操作时,支持 bean 中的方法被正确调用,包含表项的 ArrayList 被正确更新,并且导航方法返回到表所在的同一页面,正确执行。
但是当页面重新加载时,表格不会更新。我看到删除操作之前表格中的相同项目。
如果我再次重新加载页面,现在表格已更新。
看起来就像是在后台 bean 完成更新之前渲染了视图。
如何在支持 bean 完成更新后强制呈现视图?
这里有一些代码:
jsf页面中的commandLink,dataTable里面:
<h:column>
<f:facet name="header">
<h:outputText value="Rimuovi" />
</f:facet>
<h:commandLink action="#{servicesListBean.removeServizio}" title="Rimuovi questo servizio" onclick="if(!confirm('Vuoi davvero rimuovere questo servizio?')) return false">
<h:outputText value="Rimuovi" />
</h:commandLink>
</h:column>
这里是backing bean中的方法:
public String removeServizio() {
this.servizioToRemove = (Servizio) getDataTable().getRowData();
try {
ServiziDAO.removeServizio(this.servizioToRemove.getId());
} catch (Exception e) {
// ...
}
return userSessionBean.goToElencoServizi();
}
在这种情况下,我将 请求范围 给了支持 bean。 我已经尝试给它会话范围并调用一个方法来更新列表,但结果是一样的。
我希望我已经足够清楚了。提前感谢大家。
对这个改变一切的问题的更新
感谢大家。 正如 McDowell 所说,问题不在渲染视图的时间,问题根本与 JSF 无关。
发生的情况是,当我从数据库中删除一个项目时,我没有删除该行,我只是为该项目设置了一个结束日期。这是在我的应用程序中执行此操作的正确方法,但是在将结束日期设置为项目的查询中,我花时间使用System.currentTimiMillis(),在重新加载更新列表的查询中,我使用了sysdate甲骨文服务器。
这两个日期之间有几分之一秒的差异,这就是为什么我在重新加载页面时可以看到更新的列表:因为已经过了一到两秒!
也许这个问题对其他人有用。
【问题讨论】:
标签: java jsf jakarta-ee