4

編集された質問...

こんにちは、

バッキング Bean から複合コンポーネントの .xhtml ファイルをロードし、ページに動的に追加したいと考えています。.xhtml ファイルの名前は、変数から取得されます。

元。:

public MyBean (){

    String componentFile = "myCompositeComponent.xhtml"

    public String addComponentToPage(){

          //how do that?...

          return null;
    }

} 

ありがとうございました!

4

2 に答える 2

6

それ不可能です。複合コンポーネントはテンプレートベースであり、ビューでのみ使用できます。最善の策は、最初にモデルの複合コンポーネントに記述した JSF コードを正確に繰り返すことです。@FacesComponentを拡張しUIComponent@FacesRenderer. 確かに、これは退屈で不透明な作業ですが、このようにして、1 行のコードでビューとモデルの両方で再利用可能なコンポーネントを作成できます。

醜い代替案は、考えられるすべてのコンポーネントをビューに配置し、rendered属性を使用することです。

<my:component1 rendered="#{bean.myComponentType == 'component1'}" />
<my:component2 rendered="#{bean.myComponentType == 'component2'}" />
<my:component3 rendered="#{bean.myComponentType == 'component3'}" />
...

必要に応じてこれを Facelets タグ ファイルにラップして、隠していくつかの場所で再利用できるようにします。

于 2010-11-16T00:09:04.263 に答える
0

バッキング Bean から複合コンポーネントを追加する理由がわかりません。イベントが発生した場合に動的に表示できるようにしたいと思いますが、そのために AJAX reRender があります。

たとえば、次のことができます。

<h:panelGroup id="composite" rendered="#{myBean.renderComponent}">
    <my:compositecomponent/>
</h:panelGroup>

renderComponentプロパティには値が格納されますboolean。その値を切り替えて、Richfaces などで reRender することができcompositeます<a4j:commandLink>

お役に立てば幸いです、ダニエル

于 2010-11-14T12:33:22.917 に答える