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应用程序配置资源,并在资源存在时加载它。