我正在尝试使用a4j:poll
组件进行ajax在一段时间间隔后重新加载数据表。它工作正常,但是当表自动重新加载并且我在最后一列中使用工具(编辑/删除行)时,数据表(所有行)消失,我必须手动加载它(使用 h:commandButton
)..
这是我的代码的一部分:
<h:form>
<a4j:poll id="poll" interval="30000" action="#{bean.load}" enabled="#{bean.pollEnabled}" render="list" />
</h:form>
<h:form id="list" ...>
<rich:dataTable id="table" var="item" value="#{bean.model}">
...
调用相同加载方法的按钮:
<h:commandButton id="btn" action="#{bean.load}" ... />
当我使用按钮重新加载它时,我可以使用最后一列中的工具。你不知道为什么吗?
更新:
- 似乎在第一种情况(
a4j:poll
)中,当使用编辑/删除时,会调用 bean 的构造函数...... - bean 是
@ViewScoped
最佳答案
seems that in first case (a4j:poll), when using edit/delete, constructor of the bean is called
我不做 RichFaces,但我猜测这个问题在某种程度上与 JSF issue 790 有关。这会导致其他表单的 View 状态在由单独表单发起的 ajax 请求期间丢失(实际上还会导致与其他表单关联的支持 bean 重建)。这也被描述为 commandButton/commandLink/ajax action/listener method not invoked or input value not updated 的第 7 点。 .
在您的特定情况下,放置 <a4j:poll>
与表格相同的形式应该可以解决问题。我不确定为什么首先要以单独的形式放置它,但这似乎没有必要。
关于ajax - a4j :poll - reloading data model,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12103641/