我有一个名为的复合组件<my:foo>
,我正在构建另一个名为<my:bar>
. 但是当我尝试在 of 内部使用时<my:foo>
,会引发以下异常:<cc:implementation>
<my:bar>
<my:foo>
标签库支持命名空间:http: //java.sun.com/jsf/composite/mycomponents,但没有为名称定义标签:foo
这是如何引起的,我该如何解决?
我有一个名为的复合组件<my:foo>
,我正在构建另一个名为<my:bar>
. 但是当我尝试在 of 内部使用时<my:foo>
,会引发以下异常:<cc:implementation>
<my:bar>
<my:foo>
标签库支持命名空间:http: //java.sun.com/jsf/composite/mycomponents,但没有为名称定义标签:foo
这是如何引起的,我该如何解决?
这是由 Mojarra 2.1.8 中引入的错误引起的,该错误在 2.1.9 中继续,并在 2.1.10 中修复。这个错误导致复合组件自己的 XML 命名空间不能在根 XML 元素中声明,例如 /// etc <ui:component>
,如下所示:<ui:composition>
<html>
<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>