我有一个名为的复合组件<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>