3

という名前の複合コンポーネントがあり、という<my:foo>名前の別の複合コンポーネントを構築しています<my:bar>。しかし、の<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 で修正されたバグが原因です。<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>

以下も参照してください。

于 2012-06-05T15:05:02.677 に答える