3

JSFでカスタムコンポーネントを作成するには、UIComponentを拡張するクラスを作成し、そのコンポーネントタイプをJSFに登録する必要があります(例:@FacesComponent)。このコンポーネントとその属性をファセットページで使用するには、タグ記述ファイルと呼ばれる特別なファイルでコンポーネントをファセットタグにリンクする必要があります。

<tag>
    <tag-name>test</tag-name>
    <component>
        <component-type>local.test.component_type</component-type>
    </component>
</tag>

わかりましたが、タグクラス(およびタグハンドラー)の使用と混同しています。mojarraソースコードを見ると、すべてのhtml基本コンポーネントは、UIComponentELTagを拡張するコンポーネントタグクラスを使用して、タグライブラリ記述ファイルで宣言されています。例えば:

<tag>
   <name>commandButton</name>
    <tag-class>
        com.sun.faces.taglib.html_basic.CommandButtonTag
    </tag-class>
</tag>

UIComponentELTagのJSFAPIを見てください:

UIComponentELTagは、そのスーパークラスを特殊化して、ELAPI式から値を取得するプロパティを許可します。

このタグは、Facesバージョン1.2およびJSPバージョン2.1コンテナで使用するために設計されています。

次に、問題は、UIComponentELTagを拡張するクラスを使用して、コンポーネントをリンクするのではなく、タグ属性をカスタムコンポーネントにリンクする必要がある場合です。タグクラスを使用しない場合、コンポーネントはJSPページまたは以前のJSFバージョンでは使用できず、JSFフェイスレットでのみ機能しますか?

4

1 に答える 1

2

タグクラスを使用しない場合、コンポーネントはJSPページまたは以前のJSFバージョンでは使用できず、JSFフェイスレットでのみ機能しますか?

そのとおりです。JSF 2.0カスタムコンポーネントにタグクラスを使用しない場合、JSF 2.0カスタムコンポーネントはJSPと互換性がなく、JSF1.2以前とも互換性がありません。JSPはJSF2.0以降非推奨になっているため、JSPやJSF 1.2を絶対にサポートする必要がない限り、タグクラスを作成する必要はまったくありません。これにより、不要な定型コードを回避できます。PrimeFacesなどの一部のJSF2.0コンポーネントライブラリは、JSPをまったくサポートしていません。

タグハンドラーは別の話です。タグハンドラーは、UIコンポーネントのタグクラスと同じではありません。タグハンドラーとは何かを理解するには、JSFコア(<f:xxx>)タグライブラリを調べてください。すべての標準JSFタグハンドラーがそこにあります。これらはJSF2.0でも引き続き役立ちます。タグハンドラーを使用すると、JSFビューの構築方法を制御できます(UIコンポーネントを使用すると、JSFビューのレンダリング方法を制御できます)。

于 2012-06-25T12:57:18.560 に答える