1

我一直在学习 JavaEE8 并通过一些项目进行实践,了解 Servlet 4.0 和 JSF 2.3 等新技术。我在许多论坛和页面上阅读过,在一些我看到他们这么说web.xml并且faces-config.xml没有必要,因为现在使用注释,但在其他一些他们继续使用它们。

在哪些情况下应该继续使用 Web Deployment Descriptor->web.xml和应用程序配置资源文件-> faces-config.xml

4

2 回答 2

1

它们不是必需的,但我强烈建议您使用它们,因为无论如何您迟早都需要它们来进行其他配置。

注释用于实现更好的可读性并简化faces-config.xmland web.xml,但是它们甚至几乎不允许在配置文件中进行配置选项。例如,您可以使用@FacesValidatorAnnotation 而不是在faces-config.xml.

使用注释无法完成的任务是声明欢迎页面。如果要指定它,则需要web.xml.

于 2018-05-27T19:15:09.357 回答
0

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.

于 2018-05-27T19:44:27.807 回答