JSF2缓存-将某些facelets从添加到faceletcache中排除

时间:2018-09-04 19:36:11

标签: jsf-2.2 facelets tag-handler facelet-tag

我们正在将动态内容(从DB检索到)添加到JSF页面;每次遇到标签时,标签处理程序都会基于id检索内容并生成唯一的url,然后通过调用includeFacelet将内容添加到FaceletContext中

在TagHandler内

public class CustomTagHandler extends TagHandler {

    @Override
    public void apply(FaceletContext ctx, UIComponent parent) {
       String spec = "include://dynamicUrl/" + getUniqueId() ;
       String contentFromDB = "some content fetched from db based on id";
       URL url = new URL(null, spec, new MyCustomHandler(contentFromDB));
       ctx.includeFacelet(parent, url);
       nextHandler.apply(ctx, parent);
    }

}

MyCustomHandler正在扩展URLStreamHandler,如页面Include dynamic content containing JSF tags/components from stream

所示

这里的问题是所有唯一的url都已添加到JSF facelet缓存中,并且它们永不过期。 JVM堆大小正在增长,并且内存不足。这些URL绝不会被JSF Facelet缓存引用,因此不会被垃圾收集。

是否有人知道将某些Facelets排除在添加到JSF Facelet缓存之外,或者以任何方式从JSF缓存中删除那些Facelets?

我不想通过在web.xml中设置javax.faces.FACELETS_REFRESH_PERIOD来排除所有facelets。我能想到的唯一方法是使用反射访问JSF facelets缓存,并从parallelHashMap中删除这些条目(不是首选)。

0 个答案:

没有答案