我一直在学习 JavaEE8 并通过一些项目进行实践,了解 Servlet 4.0 和 JSF 2.3 等新技术。我在许多论坛和页面上阅读过,在一些我看到他们这么说web.xml
并且faces-config.xml
没有必要,因为现在使用注释,但在其他一些他们继续使用它们。
在哪些情况下应该继续使用 Web Deployment Descriptor->web.xml
和应用程序配置资源文件-> faces-config.xml
?
我一直在学习 JavaEE8 并通过一些项目进行实践,了解 Servlet 4.0 和 JSF 2.3 等新技术。我在许多论坛和页面上阅读过,在一些我看到他们这么说web.xml
并且faces-config.xml
没有必要,因为现在使用注释,但在其他一些他们继续使用它们。
在哪些情况下应该继续使用 Web Deployment Descriptor->web.xml
和应用程序配置资源文件-> faces-config.xml
?
它们不是必需的,但我强烈建议您使用它们,因为无论如何您迟早都需要它们来进行其他配置。
注释用于实现更好的可读性并简化faces-config.xml
and web.xml
,但是它们甚至几乎不允许在配置文件中进行配置选项。例如,您可以使用@FacesValidator
Annotation 而不是在faces-config.xml
.
使用注释无法完成的任务是声明欢迎页面。如果要指定它,则需要web.xml
.
I found a specific problem in the Mojarra implementation of JSF 2.3 when using the web.xml
or faces-config.xml
file. In the code of this implementation, the ELUtils class has the following condition:
if (getFacesConfigXmlVersion(facesContext).equals("2.3") || getWebXmlVersion(facesContext).equals("4.0")) {
throw new FacesException("Unable to find CDI BeanManager");
}
which throws an exception: "Unable to find CID BeanManager". I only had the faces-config.xml
file with the latest version of JSF specified in the namespace and I was throwing that exception.
To avoid this problem, you can specify a different version of JSF (before 2.3) in the faces-config.xml
file and specify a different version of the web.xml
file (before 4.0), or simply do not add any of these configuration files. In my case, I removed the faces-config.xml
and ran the application without problems.
I hope that the implementation of Mojarra will solve that little detail.