Jsf 现在是否需要faces-config.xml和web.xml?

Jsf 现在是否需要faces-config.xml和web.xml?,jsf,web.xml,faces-config,jsf-2.3,java-ee-8,Jsf,Web.xml,Faces Config,Jsf 2.3,Java Ee 8,我一直在学习JavaEE8,并在一些项目中进行实践,了解Servlet4.0和JSF2.3等新技术。我在许多论坛和页面上读过,在一些论坛和页面上,我看到他们说web.xml和faces-config.xml是不必要的,因为现在使用了注释,但在其他一些论坛上,他们继续使用注释 在哪些情况下,您应该继续使用Web部署描述符->Web.xml和应用程序配置资源文件->faces config.xml?它们不是必需的,但我强烈建议您使用它们,因为您迟早会需要它们来进行其他配置 注释用于实现更好的可读性并

我一直在学习JavaEE8,并在一些项目中进行实践,了解Servlet4.0和JSF2.3等新技术。我在许多论坛和页面上读过,在一些论坛和页面上,我看到他们说
web.xml
faces-config.xml
是不必要的,因为现在使用了注释,但在其他一些论坛上,他们继续使用注释


在哪些情况下,您应该继续使用Web部署描述符->
Web.xml
和应用程序配置资源文件->
faces config.xml

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

注释用于实现更好的可读性并简化
faces config.xml
web.xml
,但是它们甚至不允许在配置文件中进行配置选项。 例如,您可以使用
@FacesValidator
注释,而不是在
faces config.xml
中声明和引用相应的类


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

当使用
web.xml
faces config.xml
文件时,我在JSF 2.3的Mojarra实现中发现了一个特定的问题。在该实现的代码中,洗脱类具有以下条件:

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的实现能够解决这个小细节。

我个人总是使用web.xml和faces-config.xml,并将最新版本放在“header”中,但如果我只使用默认值,就不要在其中放任何特定的配置。如果您不想使用默认值(例如,在JSF开发模式下运行您的应用程序),您可以在那里添加这些内容。但请记住,许多“教程”都是古老的(并非完全错误,但也不是最新的)。链接的副本全面解决了何时使用faces-config.xml的问题,但甚至没有提到这个问题的另一部分:“在什么情况下,您应该继续使用Web部署描述符->Web.xml?”。这在最新的Mojarra版本中仍然存在问题吗?是的,我尝试使用最新的Mojarra版本:2.4.0。这仅在使用
@MangedBean
注释时才会发生。如果使用CDI
@命名的
文件,则不会出现此错误。(与wildfly 18核对)