1

我正在使用 PrimeFaces JSF 库,并且我有一棵树,其中每个节点都是一个复选框:

<p:tree selectionMode="checkbox"...>

这棵树代表一些文件,它每 5 秒动态刷新(轮询)一次,因为可以添加或删除文件/节点:

<p:poll interval="5" update="treeId"... />

用户可以通过树节点复选框选择文件。选定的节点保存在 TreeNode 数组中:

<p:tree selection="#{BackingBean.selectedNodes}"...>

其中 selectedNodes 定义为:

private TreeNode[] selectedNodes;

问题是:由于树不断刷新(每 5 秒),我失去了树状态!用户选中的内容再次变为未选中。

如何在 5 秒刷新之间保持树状态的记忆?

4

1 回答 1

1

如果您使用的是 JSF 2:

制作你的支持豆@ViewScoped

@ManagedBean
@ViewScoped
public class BackingBean {
    ...
}

如果您使用的是 JSF 1.2:

使用来自 Richfaces 的组件a4j:keepAlive :

<a4j:keepAlive bean="BackingBean" />

您还可以选择使用Tomahawk 的 saveState(使用适合您项目的 Tomahawk 版本),仅将 selectedNodes 放在视图中:

<t:saveState value="#{BackingBean.selectedNodes}" />

只需将 Tomahawk 及其依赖项放在 中WEB-INF/lib,在您的 web.xml 中注册过滤器并在您的.xhtml页面上注册名称空间,您就可以开始了。

于 2012-07-06T17:10:52.990 回答