4

我有一个很大的应用程序范围内容缓冲区,我想保留在内存中。使用 Omnifaces 让我们很容易做到这一点。

但是,如果我需要使缓存过期,似乎没有办法这样做。如果需要,我可以设置时间属性,但这似乎并不是解决这个难题的理想答案。

对强制更新基础数据有什么建议吗?

谢谢,

特马尔

4

1 回答 1

5

但是,如果我需要使缓存过期,似乎没有办法这样做。

在标签/组件上确实没有方法,但有一种编程方式。如果您为缓存条目分配显式键,则此方法效果最佳:

<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标签添加一个属性以使其更简单一些,我们将在展示中添加一个示例,展示如何手动使条目过期。

于 2013-05-01T12:38:06.243 回答