6

创建多个人脸配置文件时,将 faces-config.xml 放在 WEB-INF 之外是否正确?JSF 规范对此似乎不是很清楚(第 10.1.3 节)

如果是,这个 faces-config.xml 应该如何在 web.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 之外 - 将参数值声明为“/WebContent/WEB-INF/faces-config2.xml”之类的内容是否正确?

4

3 回答 3

7

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

您不能使用“/WebContent/WEB-INF/faces-config2.xml” - AFAIK“WebContent”是 Eclipse 特定的。让配置文件名称在 WAR 中是绝对的。这意味着它们将始终以“/WEB-INF/”开头。

于 2009-09-02T12:27:49.470 回答
1

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

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

于 2009-09-04T04:37:20.487 回答
0

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

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

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

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

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

于 2009-09-02T12:38:11.470 回答