【问题标题】:Is faces-config.xml and web.xml needed nowadays? [duplicate]现在需要 faces-config.xml 和 web.xml 吗? [复制]
【发布时间】:2018-11-03 19:12:14
【问题描述】:

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

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

【问题讨论】:

  • 我个人总是使用 web.xml 和 faces-config.xml 并将最新版本放在“标题”中,但如果我只使用默认值,请不要在其中放置任何特定配置。如果您不想使用默认值(例如,在 JSF 开发模式下运行您的应用程序),您可以在此处添加内容。但请记住,许多“教程”都是古老的(并非完全错误,但也不是最新的)。
  • 链接副本全面解决了何时使用faces-config.xml的问题,但甚至没有提到这个问题的另一部分:“其中如果您继续使用 Web 部署描述符-> web.xml".

标签: jsf web.xml faces-config jsf-2.3 java-ee-8


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    在使用web.xmlfaces-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 的实现能够解决这个小细节。

    【讨论】:

    • 在最新的 Mojarra 版本中这仍然是一个问题吗?
    • 是的,我尝试使用最新的 Mojarra 版本:2.4.0。
    • ONLY在使用@MangedBean注解时发生。如果您使用 CDI @Named,则不会出现此错误。 (用wildfly 18检查)
    猜你喜欢
    • 2013-03-12
    • 2016-02-13
    • 2014-11-17
    • 1970-01-01
    • 2011-12-07
    • 1970-01-01
    • 1970-01-01
    • 2016-11-04
    • 2017-08-17
    相关资源
    最近更新 更多