警告:此页面要求使用前缀 XXX 声明的 XML 命名空间 http://xmlns.jcp.org/jsf/XXX 但该命名空间不存在标签库

Warning: This page calls for XML namespace http://xmlns.jcp.org/jsf/XXX declared with prefix XXX but no taglibrary exists for that namespace

我正在使用 Netbeans 8.02,它似乎理解它帮助我创建的复合组件。它位于文件夹 /resources/ezcomp 中(Nebeans 默认使用此文件夹),如下所示:

<html xmlns="http://www.w3.org/1999/xhtml"
  xmlns:cc="http://xmlns.jcp.org/jsf/composite"
  xmlns:p="http://primefaces.org/ui"
  xmlns:h="http://xmlns.jcp.org/jsf/html"
  xmlns:f="http://xmlns.jcp.org/jsf/core">

<!-- INTERFACE -->
<cc:interface>
    <cc:attribute name="pobject"
                  type="test.database.UserItem"
                  required="true" />
</cc:interface>

<!-- IMPLEMENTATION -->
<cc:implementation>
    ...

当我编辑页面以使用该组件时,NetBeans 将其保存在其代码完成数据库中,并在页面上创建一个 xmlns 引用,如下所示。

xmlns:ezcomp="http://xmlns.jcp.org/jsf/composite/ezcomp"

问题是当 Mojarra 2.1.6 (Glassfish 3) 遇到这个问题时它会显示一条消息:

Warning: This page calls for XML namespace 
http://xmlns.jcp.org/jsf/composite/ezcomp declared with 
prefix ezcomp but no taglibrary exists for that namespace.

我上次这样做时 URL 是 java.sun.com 所以我猜这个行业在我不在的时候继续发展。如果我将 URL 更改为使用 java.sun.com 它会变成空指针异常。

有人知道如何解决这个问题吗?

http://xmlns.jcp.org/jsf/* 命名空间是自 JSF 2.2 以来新增的。这些警告表明您实际上正在使用 JSF 2.0/2.1,或者已将您的项目配置为使用 JSF 2.0/2.1。

如果您不是 using/targeting JSF 2.2,那么您根本不应该使用 JSF 2.2 引入的命名空间。在 JSF 2.0/2.1 中,XML 命名空间是 http://java.sun.com/jsf/*,如下所示。

<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:cc="http://java.sun.com/jsf/composite"
>

如果您确信自己实际使用的是 JSF 2.2,那么您需要在项目属性的某处配置目标 JSF 版本。在 Eclipse 中,您可以在 Project Facets 中找到它。下图显示版本 2.0。那你应该把它改成 2.2。

如果您不能 select JSF 2.2,那么 IDE 本身很可能需要更新。对于 Eclipse,在 WTP 3.5 中添加了 JSF 2.2 支持,该支持首先在 Eclipse 4.4 Luna 中引入。

另请参阅: