バッキングビーンからの実行時にJSF 2複合コンポーネントを追加する
-
28-09-2019 - |
質問
編集された質問...
こんにちは、
バッキングビーンからコンポジットコンポーネントの.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>
.
それが役立つことを願っています、ダニエル
所属していません StackOverflow