【问题标题】:JSF composite components in JAR not recognised in NetBeansJAR 中的 JSF 复合组件在 NetBeans 中无法识别
【发布时间】:2014-03-03 15:49:00
【问题描述】:

我在我的项目中添加了一个通用 JAR。这个罐子看起来像......

CommonWeb.jar
 |-- META-INF
 |    |-- resources
 |    |    `-- common
 |    |         |-- css
 |    |         |    `-- my.css
 |    |         |-- js
 |    |         |    `-- my.js
 |    |         |-- images
 |    |         |    `-- my.png
 |    |         |-- components
 |    |         |    `-- mycomposite.xhtml
 |    |         `-- templates
 |    |              `-- mytemplate.xhtml
 |    |-- faces-config.xml
 |    `-- MANIFEST.MF
 :

一切正常,只是 Netbeans 无法识别我的复合组件。尝试使用该组件的页面看起来像这样......

<ui:composition template="/resources/common/templates/mytemplate.xhtml"
                xmlns="http://www.w3.org/1999/xhtml"
                xmlns:h="http://java.sun.com/jsf/html"
                xmlns:ui="http://java.sun.com/jsf/facelets"
                xmlns:p="http://primefaces.org/ui"
                xmlns:f="http://java.sun.com/jsf/core"
                xmlns:cmn="http://java.sun.com/jsf/composite/common/components">

    <ui:define name="content">
        ...
        <cmn:mycomposite ... />
        ...
    </ui:define>
</ui:composition>

项目会编译运行,不用担心。但是 IDE 在 &lt;cmn:mycomposite ... /&gt; 上给了我红色的波浪线,并且不会自动完成等。如果我将组件复制到项目自己的资源文件夹中,一切都会正常工作,所以看起来 netbeans 只是不看 jar .

有很多类似问题的问题,例如:

...但是没有令人满意的解决方案或变通方法。

还有一些关于此事的 netbeans 错误报告,但这些似乎都已“修复”

我缺少一些配置吗?有没有人真正设法使用最新版本的 NetBeans(撰写本文时为 NetBeans 7.4 Patch 2)来实现这一点?有没有人找到真正有效的解决方法?

更新:

此问题在 NetBeans 8 中继续出现

【问题讨论】:

  • 我不做Netbeans,所以我现在不能自己尝试写一个可靠的答案。我只能建议自己尝试一件事:创建一个/META-INF/foo.taglib.xml,其中根据此问答明确声明 JAR 中包含的复合组件的新命名空间:stackoverflow.com/questions/22247914/… 然后,尝试在 Netbeans 中使用新的 XML 命名空间。至少,这是通常的“组件库”应该如何工作的,我很难想象 Netbeans 也不会考虑到它们。
  • @BalusC 在*.taglib.xml 中声明namespacecomposite-library-name 并不能解决问题。
  • 为了确定,taglib 在 JAR 中(不在 WAR 中),并且您确实将使用页面中的 XML 命名空间更改为 taglib 中声明的命名空间?
  • 是的,这里一切都很好。此外,项目编译和运行没有任何问题,只是恼人的问题是 NetBeans 无法识别复合组件,从而将页面标记为错误。当taglib.xml中显式定义了一些标签时,NetBeans也没有问题,问题只是与组合组件有关,在*.taglib.xml中没有显式定义,而是通过&lt;composite-libraray-name&gt;的用法定义
  • 问题在 Netbeans 8.1 中继续存在 netbeans.org/bugzilla/show_bug.cgi?id=257684

标签: jsf jsf-2 netbeans jar composite-component


【解决方案1】:

此问题仅是 IDE 问题,并在 8.1 版中继续存在。它源于Netbeans bugzilla 中确定的错误 - 特别是在“用于 XHTML 的 JSF 编辑器”模块 (org.netbeans.modules.web.jsf.editor) 中

我通过下载 Netbeans 的 8.1 版源文件并自己应用建议的补丁解决了这个问题。我猜这是早期版本中的类似问题,但我没有检查。

要下载和编译 Netbeans,您可以按照 here 中的“操作方法”进行操作

变化总结:

CompositeComponentModel.java 第 296 行更改为:

if (parent != null && parent.getName().equalsIgnoreCase("META-INF")) { //NOI18N

JsfBinaryIndexer.java 第 74 行更改为:

namePattern = ".*\\.tld|.*\\.taglib\\.xml|.*\\.xhtml",

第 81 行递增的索引器版本更改为:

static final int INDEXER_VERSION = 11; //NOI18N

鉴于该错误正在被跟踪,希望它能够进入下一个版本。

【讨论】:

    猜你喜欢
    • 2013-06-12
    • 1970-01-01
    • 2013-04-22
    • 1970-01-01
    • 2014-09-14
    • 2011-12-14
    • 1970-01-01
    • 2011-11-09
    • 2011-12-14
    相关资源
    最近更新 更多