JSF面向WEB-INF外的配置文件?

时间:2009-09-02 01:51:03

标签: java jsf web-inf faces-config

创建多个面配置文件时,在WEB-INF之外设置faces-config.xml是正确的吗? JSF规范似乎并不十分清楚(第10.1.3节)

如果是,那么应该如何在web.xml中声明faces-config.xml? IDE生成的路径(如Eclipse / JDev)通常使用类似的东西:

<context-param>
    <param-name>javax.faces.CONFIG_FILES</param-name>
    <param-value>/WEB-INF/faces-config1.xml</param-value>
</context-param>

现在,如果我的faces-config.xml在WEB-INF之外 - 将param-value声明为“/WebContent/WEB-INF/faces-config2.xml”是否正确?

3 个答案:

答案 0 :(得分:7)

有可能,但不推荐。将配置文件放在WEB-INF下的原因是服务器知道不提供这些文件 - 你有代码,数据库配置和其他敏感的东西。

你不能使用“/WebContent/WEB-INF/faces-config2.xml” - AFAIK“WebContent”是eclipse特有的。将配置文件名称设置为WAR内的绝对名称。这意味着它们将始终以“/ WEB-INF /".

开头

答案 1 :(得分:1)

正如David的回答中所提到的,不建议将配置文件放在WEB-INF目录之外。但是,如果您正在寻找组织项目的方法,可以尝试在 WEB-INF下创建一个新的子目录

例如,当我处理大量的faces-config文件时,我将创建一个目录/WEB-INF/config并将faces-config文件放在那里。

答案 2 :(得分:0)

如果从web.xml引用它们,那么该文件需要在运行时处于战争状态。容器可以通过其他方式发现faces-config.xml资源。

<强> 10.4.2 在应用程序启动时,在处理任何请求之前,JSF实现必须 处理零个或多个应用程序配置资源,根据以下内容定位 算法:

  • 搜索名为“META-INF / faces-config.xml”的所有资源 此Web应用程序的ServletContext资源路径,并将每个作为JSF加载 配置资源(按其返回顺序的相反顺序排列 当前Thread的ContextClassLoader上的getResources()。

  • 检查是否存在名为的上下文初始化参数 javax.faces.CONFIG_FILES。如果存在,请将其视为逗号分隔的列表 上下文相对资源路径(以“/”开头),并加载每个指定的 资源。

  • 检查是否存在名为“/ WEBINF /”的Web应用程序配置资源 faces-config.xml“,并在资源存在时加载它。