jsf - JSF 2.2 中的自定义 FaceletFactory/虚拟主机 facelets 的替代品

标签 jsf facelets factory jsf-2.2 mojarra

从 Mojarra/JSF 2.2 开始。不再可能提供自定义 FaceletFactory使用 web.xml上下文参数:

<context-param>
        <param-name>com.sun.faces.faceletFactory</param-name>
        <param-value>my.faces.overrides.MyFaceletFactory</param-value>
</context-param>

我的应用程序提供了一些 CMS 功能,包括虚拟主机支持以根据当前请求的域提供不同的页面(facelets)。所以http://www.domain1.com/index.xhtml返回与 http://www.otherdomain.com/index.xhtml 不同的内容.使用自定义资源解析器,其背后的机制并不是什么大问题。这样做的真正问题是,jsf 仅根据其请求的 uri 缓存 facelets,该 uri 不包含主机名(两种情况下都是 "/index.xhtml")。我通过简单地在我的自定义 FaceletFactory 中添加主机名来解决这个问题。 :uri = "/" + getCleanHostName() + "://" + uri; .对于 JSF 2.2,这似乎不再可能。有没有其他方法可以在 JSF 2.2 中存档正确的缓存行为?由于其性能影响,禁用人脸缓存不是一个选项。

最佳答案

有计划按照 issue 611 在 JSF 规范中对其进行标准化。 .但是后来被取消了,因为存在抽象泄漏。另见 What's new in JSF 2.2?但是,尽管 Ed 在 issue 611 中提出要求,但原始状态不再回滚,如下所述:

But when I removed the standardized FaceletFactory, in r11053, I didn't put back the context param. Would you be satisfied if I just put it back and it worked as in 2.1?



您可能想要创建一个新问题来唤醒它。

另一种方法是将其替换为自定义 ResourceHandler (不是 ResourceResolver ,因为它是 JSF 2.2 中的 deprecated),以及自定义 FaceletCacheFactory (自 JSF 2.1 起标准化)可通过 <factory><facelet-cache-factory> 注册在 faces-config.xml .

关于jsf - JSF 2.2 中的自定义 FaceletFactory/虚拟主机 facelets 的替代品,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31984924/

相关文章:

jsf - Spring MVC + Facelets,有可能吗?

Java工厂模式-如何防止匿名子类

ajax - 使用 p :commandbutton 成功登录 JSF 后重定向到主页

eclipse - 如何在 Eclipse 中查看 jsf/facelets 元素的文档

ajax - JSF - 使用 AJAX 和 selectOneListbox 创建动态菜单

php - 如何在 PHP 5.3 中使用自动加载器构建工厂、命名空间和类?

dart - 构造函数不能有类型参数。dart(type_parameter_on_constructor)

javascript - h :commandButton 中实际操作后的 OnClick 操作

java - 如何在 JSF 表中加载动态内容

jsf - 表单未提交