cvc-complex-type.2.4.a 在 faces-config.xml 中发现以元素工厂开头的无效内容

cvc-complex-type.2.4.a invalid content was found starting with element factory in faces-config.xml

我在一个eclipse项目中出现这个错误,从Netbeans项目导入,设置为mavenDynamic Web Project ( CDI1.1, Java 1.8, JS 1.0, JSF 2.2, JAX-RS 2.0, JBoss Maven集成 1.0 和 JPA 2.1)

<?xml version='1.0' encoding='UTF-8'?>
<faces-config version="2.2"
              xmlns="http://xmlns.jcp.org/xml/ns/javaee"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_2.xsd">

    <application>
        <locale-config>
            <default-locale>en</default-locale>
            <supported-locale>fr</supported-locale>
        </locale-config>
        <resource-bundle>
            <base-name>Messages</base-name>
            <var>messages</var>
        </resource-bundle>


         <factory>
            <exception-handler-factory>org.omnifaces.exceptionhandler.FullAjaxExceptionHandlerFactory</exception-handler-factory> 
        </factory>

    </application>
</faces-config>

答案在问题中,根据XSD文件http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_2.xsd,节点application下不允许有节点factory,这样你的XML 文件无效。

application下支持的元素列表是:

  • 动作侦听器
  • 默认渲染套件 ID
  • 消息包
  • 导航处理程序
  • 视图处理程序
  • 状态管理器
  • el-解析器
  • 属性-解析器
  • 变量解析器
  • 资源处理程序
  • 资源库合同
  • 系统事件侦听器
  • 语言环境配置
  • 资源包
  • 应用扩展
  • 默认验证器

根据 XSD 文件,节点 factory 似乎与 application 处于同一级别,因此直接位于 faces-config 下一个:

<faces-config ...
    <application>
    ...
    </application>
     <factory>
        <exception-handler-factory>org.omnifaces.exceptionhandler.FullAjaxExceptionHandlerFactory</exception-handler-factory> 
    </factory>
</faces-config>