我有一个很大的应用程序范围内容缓冲区,我想保留在内存中。使用 Omnifaces 让我们很容易做到这一点。
但是,如果我需要使缓存过期,似乎没有办法这样做。如果需要,我可以设置时间属性,但这似乎并不是解决这个难题的理想答案。
对强制更新基础数据有什么建议吗?
谢谢,
特马尔
但是,如果我需要使缓存过期,似乎没有办法这样做。
在标签/组件上确实没有方法,但有一种编程方式。如果您为缓存条目分配显式键,则此方法效果最佳:
<o:cache key="myCache">
cached content here
</o:cache>
然后在支持 bean 中,您可以删除该条目的内容,如下所示:
public void reset() {
CacheFactory.getCache(Faces.getContext(), "session").remove("myCache");
}
请注意,默认范围是“会话”,因此在此处使用。如果您为标签使用了另一个范围(如“应用程序”),您将在您的支持 bean 代码中指定它。
只要您知道缓存需要过期(例如,如果操作方法更新了一些支持数据),您就可以调用此方法,或者您可以创建一个显式的重置按钮:
<h:form>
<h:commandButton action="#{someBean.reset}" value="Reset cache" />
</h:form>
对于 OmniFaces 1.5,我们计划向o:cache
标签添加一个属性以使其更简单一些,我们将在展示中添加一个示例,展示如何手动使条目过期。