NetBeans中未识别JAR中的JSF复合组件
我已经在我的项目中添加了一个公共JAR。这个罐子看起来像NetBeans中未识别JAR中的JSF复合组件,jsf,jsf-2,netbeans,jar,composite-component,Jsf,Jsf 2,Netbeans,Jar,Composite Component,我已经在我的项目中添加了一个公共JAR。这个罐子看起来像 CommonWeb.jar |-- META-INF | |-- resources | | `-- common | | |-- css | | | `-- my.css | | |-- js | | | `-- my.js | | |-- images | |
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在
上给了我红色的曲线,并且没有自动完成,等等。如果我将组件复制到项目自己的resources文件夹中,一切都会正常工作,因此netbeans似乎只是不关注jar
有相当多的问题与类似的问题,例如:
此问题继续出现在NetBeans 8中。此问题是一个仅限IDE的问题,并在版本8.1中继续存在。它源于中发现的bug,特别是在“JSF编辑器for XHTML”模块(org.netbeans.modules.web.JSF.Editor)中 我通过下载Netbeans的8.1版本源文件并自行应用建议的修补程序来解决这个问题。我猜这在早期版本中也是一个类似的问题,但我没有检查这个 要下载和编译Netbeans,您可以按照 摘要变动: CompositeComponentModel.java第296行更改为:
if (parent != null && parent.getName().equalsIgnoreCase("META-INF")) { //NOI18N
namePattern = ".*\\.tld|.*\\.taglib\\.xml|.*\\.xhtml",
JsfBinaryIndexer.java第74行更改为:
if (parent != null && parent.getName().equalsIgnoreCase("META-INF")) { //NOI18N
namePattern = ".*\\.tld|.*\\.taglib\\.xml|.*\\.xhtml",
第81行上递增的索引器版本更改为:
static final int INDEXER_VERSION = 11; //NOI18N
考虑到该漏洞正在被跟踪,希望它能进入下一个版本。我不做Netbeans,所以我现在无法亲自试用并写出可靠的答案。我只能建议您自己尝试一件事:创建一个
/META-INF/foo.taglib.xml
,其中您根据以下问题和回答为JAR中包含的复合组件显式声明一个新名称空间:然后,尝试在Netbeans中使用该新的xml名称空间。至少,“组件库”通常是这样工作的,我很难想象Netbeans会不考虑它们。@BalusC在*.taglib.xml
中声明名称空间和组合库名,并不能解决问题。可以肯定的是,taglib在JAR中(不是在战争中),您确实将using页面中的XML名称空间更改为taglib中声明的名称空间?是的,这里一切正常。此外,项目编译和运行没有任何问题,这只是一个恼人的问题,NetBeans无法识别复合组件,因此将页面标记为错误。当一些标记在taglib.xml中显式定义时,NetBeans也*没有问题,问题只是与复合组件有关,这些组件在*.taglib.xml
中没有显式定义,而是通过使用
定义的。问题在NetBeans 8.1中继续存在