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

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

如果是,那么如何在web.xml中声明faces-config.xml? IDE生成的路径(如Eclipse / JDev)通常使用以下内容:

 javax.faces.CONFIG_FILES /WEB-INF/faces-config1.xml  

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

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

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

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

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

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

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

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

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

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