質問

編集された質問...

こんにちは、

バッキングビーンからコンポジットコンポーネントの.xhtmlファイルをロードし、それをダイナミックにページに追加したいと思います。 .xhtmlファイルの名前は変数です。

元。:

public MyBean (){

    String componentFile = "myCompositeComponent.xhtml"

    public String addComponentToPage(){

          //how do that?...

          return null;
    }

} 

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

役に立ちましたか?

解決

そうです いいえ 可能。複合コンポーネントはテンプレートベースであり、ビューでのみ使用できます。あなたの最善の策は、モデルの複合コンポーネントで最初に書いたJSFコードを正確に繰り返すことです。フルワリを作成する方が良いでしょう @FacesComponent 拡張するクラス UIComponent, 、aを完成させます @FacesRenderer. 。確かに、それは退屈で不透明な仕事ですが、このようにして、ビューとモデルの両方で単一のコード行で再利用可能なコンポーネントになります。

-ugly-代替手段は、すべての可能なコンポーネントをビューに配置し、 rendered 属性。

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

必要に応じて、フェイスレットタグファイルでこれを包み、隠して複数の場所で再利用できるようにします。

他のヒント

なぜバッキングビーンから複合コンポーネントを追加したいのかわかりません。イベントの場合に動的に見えるようにしたいと思いますが、Ajax Rerenderがいます。

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

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

renderComponent 不動産ストアa boolean 価値。その価値と解決策を切り替えることができます composite 例えば、richfacesの <a4j:commandLink>.

それが役立つことを願っています、ダニエル

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top