0

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メソッドが呼び出されます。問題がどこにあるのかについてのヒントを教えてください。

4

1 に答える 1

0

私の設定ではレンダラークラスが間違っています。コンポーネントの登録に関する指示を誤解しました。render-type は、カスタム レンダラーでレンダリングされるクラスだと思いました。代わりに org.primefaces.component.TabViewRenderer でなければなりません。今では正常に動作します:)

于 2012-05-09T08:25:02.130 に答える