2

当我FacesServlet在 my中配置时web.xml,它在哪里搜索*.xhtmlfacelets?仅在 App-Root 中?

4

3 回答 3

1

我不明白你的问题。但是尝试回答:您的 Web 目录(和子目录)中具有 xhtml 扩展名的所有文件都将作为 facelets 处理。

于 2012-11-22T08:48:52.883 回答
1

默认情况下,它们在 WAR 的 Web 根文件夹和 WAR 中/META-INF/resources包含的所有 JAR的文件夹中进行扫描/WEB-INF/lib。您可以使用自定义控制此扫描算法ResourceResolver。这是一个(相对愚蠢的)示例,它扫描本地磁盘文件系统上的其他位置,当在 WAR 中(也没有在它的 JAR 中/WEB-INF/lib)中找不到任何内容时:

public class MyResourceResolver extends ResourceResolver {

    private ResourceResolver parent;

    public MyResourceResolver(ResourceResolver parent) {
        this.parent = parent;
    }

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

        if (url == null) {
            url = new File("/some/folder", path).toURI().toURL();
        }

        return url;
    }

}

关于将 Facelets 文件放在文件夹中,您应该只将/WEB-INF应该公开访问的 Facelets 文件放入其中,例如模板文件、标记文件、包含文件等。不应放置应该公开访问的文件在那里,例如模板客户端(顶级视图)。

也可以看看:

于 2012-11-22T11:39:37.280 回答
0

这将取决于 web.xml 中的这些参数:

<context-param>
    <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
    <param-value>.xhtml</param-value>
</context-param>

<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.jspx</url-pattern>
</servlet-mapping>
于 2012-11-22T08:54:16.640 回答