PrimeFaces Tab/Tabviewコンポーネントに基づいて新しいコンポーネントを構築したいと思います。ブラウザの[追加]タブのように見え、フォームに入力するためのページを開きます。問題は、データモデル( http://www.primefaces.org/showcase/ui/tabviewModel.jsf )に基づいてTabViewに統合したいということです。現在、フォームに入力するためのタブと、事前定義されたデータを含むタブを組み合わせるか、データのタブを動的に作成するTabViewを使用することができます。
複合コンポーネントまたは新しいJavaクラスの2つの方法でカスタムコンポーネントを作成することについてのJSFドキュメントを読みました。カスタムコンポーネントを作成しようとしましたが、これ以上説明したようには機能しないようです。
私の質問は次のとおりです。
1)複合コンポーネントでこの問題を解決することは可能ですか?はいの場合、誰かが私にヒントを与えることができますか?
2)そうでない場合、既存のPrimeFacesコンポーネント(おそらく新しい種類のTabView)に基づいて新しいコンポーネントを作成するためのチュートリアルはありますか?
UPD:いくつかの調査を行った後、最も簡単な方法はTabView用の新しいレンダラーを作成することであることに気付きました。
新しいレンダラークラスを宣言しました:
public class AddableTabViewRenderer extends TabViewRenderer
そしてそれをfaces-config.xmlに登録しました:
<render-kit>
<render-kit-id>HTML_BASIC</render-kit-id>
<renderer>
<component-family>org.primefaces.component</component-family>
<renderer-type>org.primefaces.component.TabView</renderer-type>
<renderer-class>
de.idealo.evaluation.jsf.webapp.component.AddableTabViewRenderer
</renderer-class>
</renderer>
</render-kit>
ただし、TabViewコンポーネントを含むビューがレンダリングされると、AddableTabViewRendererのオーバーライドされたメソッドではなく、TabViewRendererのencodeEndメソッドが呼び出されます。問題がどこにあるのかについてのヒントを教えてください。