3

我有一个名为的复合组件<my:foo>,我正在构建另一个名为<my:bar>. 但是当我尝试在 of 内部使用时<my:foo>,会引发以下异常:<cc:implementation><my:bar>

<my:foo>标签库支持命名空间:http: //java.sun.com/jsf/composite/mycomponents,但没有为名称定义标签:foo

这是如何引起的,我该如何解决?

4

1 回答 1

2

这是由 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>

也可以看看:

于 2012-06-05T15:05:02.677 回答