JSFのビジュアルコンポーネントに関しては正しく考えていないかもしれませんが、それは私の質問の一部だと思います。私の質問は、JSF <ui:component>実装内で宣言された変数のスコープが不足しているように見えることです。
だから、私が/resources/comp/myPanel.xhtmlを持っているとしましょう:
<?xml version="1.0" encoding="UTF-8" ?>
<ui:component xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:cc="http://java.sun.com/jsf/composite">
<cc:interface>
</cc:interface>
<cc:implementation>
<f:loadBundle var="bundle" basename="panelOnly.bundle" />
<h:outputText value="#{bundle.myText}" />
</cc:implementation>
</ui:component>
そして、そのコンポーネントにロードされるリソースバンドル、panelOnly/bundle.propertiesがあります。
myText = This is a panel resource
そして、myPanelコンポーネントmainPage.xhtmlを配置するページがあります。
<?xml version="1.0" encoding="UTF-8" ?>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:comp="http://java.sun.com/jsf/composite/comp">
<h:body>
<f:view>
<f:loadBundle basename="mainPage.bundle" var="bundle" />
<comp:myPanel />
<h:outputText value="#{bundle.myText}" />
</f:view>
</h:body>
</html>
メインページmainPage/bundle.propertiesに読み込まれるリソースバンドルがあります。
myText = This is a main page resource
ここで、私のページは次のようにレンダリングされると思います。
This is a panel resource
This is a main page resource
しかし、代わりに、私は次のようになります。
This is a panel resource
This is a panel resource
そして、それは、mainPage.xhtmlがその値を解決しようとしたときに、元のmainPageのオブジェクトではなく、コンポーネントの「バンドル」オブジェクトを参照するように、コンポーネントで「バンドル」シンボルが参照するものを壊したためだと思います。
これまでの私の回避策は、メインページの変数と衝突することのない一意の名前付き変数をコンポーネント内で使用することでした。しかし、JSFを誘導して、コンポーネントで宣言されたものをローカルスコープの変数として認識し、呼び出し元のシンボルを壊さないようにする方法があればいいのですが。
#{cc.attrs...}の下にローカルスコープの変数を作成するために使用できるタグが他にもあると思います。あなたの答えに私の地元のスコーピングオプションを列挙することができれば、それは非常に役に立ちます。<f:loadBundle>は特殊なケースであると思われますが、<ui:component>を念頭に置いて設計されていないため、回避策がない可能性があります。
ありがとう!
PS私はMojarra2.1.1(FCS 20110408)を実行しています
(2011年6月15日のバグのフォーマットとコピーアンドペースト用に編集)