これは、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>
以下も参照してください。