我有一个名为<my:foo>
的复合组件,我正在构建另一个名为<my:bar>
的复合组件。但是当我尝试在<my:foo>
的{{1}}内使用<cc:implementation>
时,会抛出以下异常:
<my:bar>
标记库支持命名空间:http://java.sun.com/jsf/composite/mycomponents,但没有为名称定义标记:foo
这是如何引起的?如何解决?
答案 0 :(得分:2)
这是由Mojarra 2.1.8中引入的错误引起的,在2.1.9中继续,并在2.1.10中修复。此错误导致无法在<ui:component>
/ <ui:composition>
/ <html>
/ etc等根XML元素中声明复合组件自己的XML命名空间,如下所示:
<ui:component
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"
xmlns:my="http://java.sun.com/jsf/composite/mycomponents"
>
<cc:interface>
...
</cc:interface>
<cc:implementation>
<my:foo />
</cc:implementation>
</ui:component>
当您尝试在<my:foo>
内嵌套<cc:implementation>
时,这会导致以下异常。
<my:foo>
标记库支持命名空间:http://java.sun.com/jsf/composite/mycomponents,但没有为名称定义标记:foo
除了降级到2.1.7并等待2.1.10发布之外,当前的解决方法是将XML名称空间声明移到<cc:implementation>
。
<ui:component
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"
>
<cc:interface>
...
</cc:interface>
<cc:implementation xmlns:my="http://java.sun.com/jsf/composite/mycomponents">
<my:foo />
</cc:implementation>
</ui:component>