使用Omnifaces <o:cache>使数据过期

Tem*_*arV 4 jsf-2 omnifaces

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

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

有关强制更新基础数据的任何建议吗?

谢谢,

Temar

Arj*_*jms 5

但是,如果我需要使缓存过期,似乎没有方法可以这样做.

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

<o:cache key="myCache">

   cached content here

</o:cache>
Run Code Online (Sandbox Code Playgroud)

然后在支持bean中,您可以删除该条目的内容,如下所示:

public void reset() {
    CacheFactory.getCache(Faces.getContext(), "session").remove("myCache");
}
Run Code Online (Sandbox Code Playgroud)

请注意,默认范围是"会话",因此在此处使用.如果您为标记使用了另一个范围(例如"application"),则应在支持bean代码中指定该范围.

只要知道缓存需要过期(例如,如果操作方法更新了某些后备数据),您就可以调用此方法,或者您可以创建一个显式的重置按钮:

<h:form>
    <h:commandButton action="#{someBean.reset}" value="Reset cache" />
</h:form>
Run Code Online (Sandbox Code Playgroud)

对于OmniFaces 1.5,我们计划在o:cache标签中添加一个属性,使其更简单一些,我们将在我们的展示中添加一个示例,说明如何手动使条目过期.