jsf - 如何对来自另一个上下文的文件使用 Facelets 组合

标签 jsf facelets composition

我有一个使用组合的应用程序(用于页面模板)。但是我们认为在创建一个 web 应用程序( war )来托管所有应用程序共享的所有应用程序的所有模板。

如何包含来自其他上下文的模板?此时我使用从 http 请求导入。但这听起来很糟糕。
<ui:composition template="http://localhost:8080/templates/layout/foo.xhtml">
我正在使用 JBoss Seam 2.x 和 JSF 1。

最佳答案

请注意,这在 JSF 2.x Facelets 中的处理方式不同,参见 this answer详情。

这可以通过自定义 Facelets 资源解析器实现。我不仅不会通过 HTTP 解析它们,而只会从类路径中解析它们。只需将共享模板打包在例如 /META-INF/resources 中JAR 文件的文件夹,并将解析器类放在同一个 JAR 中。最后在所有 webapp 中分发这个 JAR。

package com.example;

import java.net.URL;

import com.sun.facelets.impl.DefaultResourceResolver;

public class FaceletsResourceResolver extends DefaultResourceResolver {

    private String basePath;

    public FaceletsResourceResolver() {
        this.basePath = "/META-INF/resources"; // TODO: Make configureable?
    }

    public URL resolveUrl(String path) {
        URL url = super.resolveUrl(path); // Resolves from WAR.

        if (url == null) {
            url = getClass().getResource(basePath + path); // Resolves from JAR.
        }

        return url;
    }

}

web.xml 注册如下:
<context-param>
    <param-name>facelets.RESOURCE_RESOLVER</param-name>
    <param-value>com.example.FaceletsResourceResolver</param-value>
</context-param>

关于jsf - 如何对来自另一个上下文的文件使用 Facelets 组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5587808/

相关文章:

java - JSF 中的空白页

java - 在 JSF 中显示水平动态内容

java - 组合和泛型

JSF 动态地将 src 包含在 "ui:include src="#{bean.pagePath} 中”

Javascript 自包含沙箱事件和客户端堆栈

jsf - Primefaces graphicImage 总是显示相同的图片

带有 jsf2.0、xhtml 和 primefaces 2.2.RC1 的 Eclipse 自动完成(内容辅助)

jsf - f :setPropertyActionListener always setting null

C++ 模板返回

haskell - 结合 Haskell 代码的片段以获得更大的图景