我们在项目的其他组件中使用复合组件。在JBoss 7.1.0 上一切正常,但在JBoss 7.1.1 上我们会遇到这样的错误:
No handlers found for exception javax.faces.view.facelets.TagException:
/resources/components/my/bigComponent.xhtml @21,47 <my:nestedComponent>
Tag Library supports namespace: http://java.sun.com/jsf/composite/components/my,
but no tag was defined for name: nestedComponent
我们尝试了this JBoss community thread中建议的解决方案,但它没有改变我们的问题(接缝我们不是the only one in this case,解决方案可能无效,因为我们也在{{1}来自模板文件的标签)。
这是我们的两个组成部分:
嵌套:
ui:define
嵌套:
<!DOCTYPE html PUBLIC ...>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:cc="http://java.sun.com/jsf/composite"
xmlns:my="http://java.sun.com/jsf/composite/components/my" >
<cc:interface componentType="...">
<h:panelGroup>
<cc:attribute name="someAttribute" />
</h:panelGroup>
</cc:interface>
<cc:implementation>
<my:nestedComponent content="a text" />
</cc:implementation>
</html>
这是回归吗?我们做错了吗?在第一个链接中,建议的解决方案在嵌套组件中暗示如下:
<!DOCTYPE html PUBLIC ...>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:cc="http://java.sun.com/jsf/composite">
<cc:interface>
<cc:attribute name="content" />
</cc:interface>
<cc:implementation>
<h:outputText value="#{cc.attrs.content}" />
</cc:implementation>
</html>
这个<composite:interface>
<composite:facet name="greet1"/>
<composite:facet name="greet2"/>
</composite:interface>
<composite:implementation>
<lib:greet1 name="Stan" />
<lib:greet2 name="Silvert" />
</composite:implementation>
没有任何composite:facet
是什么?
答案 0 :(得分:9)
Valentinx在this thread找到了解决方法。
这个想法是将错误的名称空间声明放在<composite:implementation>
本身上,所以
<!DOCTYPE html PUBLIC ...>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:cc="http://java.sun.com/jsf/composite"
xmlns:my="http://java.sun.com/jsf/composite/components/my" >
<cc:interface />
<cc:implementation>
<my:nestedComponent content="a text" />
</cc:implementation>
</html>
变为
<!DOCTYPE html PUBLIC ...>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:cc="http://java.sun.com/jsf/composite" >
<cc:interface />
<cc:implementation xmlns:my="http://java.sun.com/jsf/composite/components/my">
<my:nestedComponent content="a text" />
</cc:implementation>
</html>
(请注意 <cc:implementation xmlns:my="http://java.sun.com/jsf/composite/components/my">
标记)
这就像一个魅力!
答案 1 :(得分:0)
感谢Xavier的回答:这是正确的!我想添加评论,但没有代表。这样做。
在我的情况下,问题有点不同,模板上有错误(不是复合:实现),我找到了一个不包含&lt; cc:implementation&gt;的解决方案。 ...
相反,从&lt; html&gt;移动模板中的xmlns:layoutComp到一个容器(&#39; div&#39;以及&#39; span&#39;工作):
<span xmlns:layoutComp="http://java.sun.com/jsf/composite/layoutComp">
<layoutComp:navigation />
</span>