定义在JSF 2中搜索Facelets的位置

时间:2012-11-22 08:03:05

标签: jsf

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

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

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文件,例如模板文件,标记文件,包含文件应该不应该公开可以公开访问的文件,例如模板客户端(顶级视图)。

另见:

答案 2 :(得分: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>