我一直在研究JavaEE8并练习一些项目,了解Servlet 4.0和JSF 2.3等新技术。我在很多论坛和网页上都看到了,有些我认为他们说web.xml
和faces-config.xml
不是必需的,因为现在使用了注释,但在其他一些论坛中他们继续使用它们。
在哪种情况下,您应该继续使用Web部署描述符 - > web.xml
和应用程序配置资源文件 - > faces-config.xml
?
答案 0 :(得分:1)
它们不是必需的,但我强烈建议您使用它们,因为无论如何您迟早都需要它们来进行其他配置。
注释用于实现更好的可读性并简化faces-config.xml
和web.xml
,但它们甚至几乎不允许在配置文件中进行配置选项。
例如,您可以使用@FacesValidator
注释,而不是在faces-config.xml
中声明和引用相应的类。
使用注释无法实现的任务将是欢迎页面的声明。如果要指定它,则需要web.xml
。
答案 1 :(得分:0)
在使用web.xml
或faces-config.xml
文件时,我在JSF 2.3的Mojarra实现中发现了一个特定问题。在此实现的代码中,ELUtils类具有以下条件:
if (getFacesConfigXmlVersion(facesContext).equals("2.3") || getWebXmlVersion(facesContext).equals("4.0")) {
throw new FacesException("Unable to find CDI BeanManager");
}
抛出异常:"无法找到CID BeanManager"。我只有faces-config.xml
文件,在命名空间中指定了最新版本的JSF,我抛出了异常。
要避免此问题,您可以在faces-config.xml
文件中指定不同版本的JSF(2.3之前),并指定web.xml
文件的不同版本(4.0之前),或者根本不指定添加任何这些配置文件。就我而言,我删除了faces-config.xml
并毫无问题地运行了应用程序。
我希望Mojarra的实施能解决这个细节。