创建多个面配置文件时,在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”是否正确?
答案 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“,并在资源存在时加载它。