如何在复合组件中缓存数据?

How can I cache data inside a composite component?

我一直在使用这个动态列表组件:

How to implement a dynamic list with a JSF 2.0 Composite Component?

我想做的一件事是缓存 "list" 的原始值,这样,当用户从这个列表中添加或删除某些内容时...我知道哪些是 added/removed 这样我就可以用它们做一些不同的事情。例如,"removed" 项目将只使用删除线代替。或者,"added" 项将具有不同的背景以表明它是最近添加的。

我现在似乎唯一能做到这一点的方法是让组件本身接受 3 个不同的列表

<mycomp:dynamicList list="#{bean.list}" addList="#{bean.addList}" 
    deleteList="#{bean.deleteList}"/>

这似乎太麻烦了。只有 web page/component 需要知道这三个列表的区别...一旦表单被实际提交,backing bean 只需要知道 "list" 的新值。所以,理想情况下,我只想使用:

<mycomp:dynamicList list="#{bean.list}"/>

利用继承的 getStateHelper() 方法可用的 JSF 视图状态。这基本上就像 JSF 视图范围一样。

确保您没有 store/copy/duplicate JSF 视图状态中的整个模型(列表),而只有 added/removed 个项目的索引。

另请参阅:

  • How to save state when extending UIComponentBase