警告:此页面调用了XML命名空间http://xmlns.jcp.org/jsf/XXX,并使用前缀XXX声明,但该命名空间没有相应的标签库。

3

我正在使用 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,它将变成空指针异常。

有人有解决方法吗?

1个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
3
“http://xmlns.jcp.org/jsf/*”命名空间是自JSF 2.2以来的新内容。这些警告表明您实际上正在使用JSF 2.0 / 2.1,或者已将您的项目配置为使用JSF 2.0 / 2.1。 如果您不使用/针对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中,您可以在项目结构中找到它。下面的图片显示了版本2.0。您应该将其更改为2.2。

enter image description here

如果您无法选择JSF 2.2,则IDE本身很可能需要更新。在Eclipse的情况下,JSF 2.2支持是在WTP 3.5中添加的,这是在Eclipse 4.4 Luna中首次引入的。 另请参阅: - 使用JSF 2.2应该使用哪个XML命名空间

但是当我将URL更改为java.sun.com时,它会触发空指针异常。 - AlanObject
这是一个不同的问题,如果没有看到堆栈跟踪,就无法回答。 - BalusC
好的,我宁愿使用JSF 2.2而不是不用。看起来我的Glassfish安装有点过时,不太适合2.2版本。 - AlanObject
5年以上的GF3是Java EE 6,这确实意味着JSF 2.0/2.1。如果您可以控制目标容器,那么升级肯定是值得的。GF4(Java EE 7 + JSF 2.2)已经发布了2年多。 - BalusC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,