2

私はチュートリアルを読みました: http://jsflive.wordpress.com/2011/03/24/custom-component-library/で、著者は空の.taglib.xmlファイルを作成しています。チュートリアルによると、タグはリソース サブフォルダー。

ただし、私には例外があります。

javax.faces.FacesException: myComponent.xhtml のコンポーネント メタデータを取得できませんでした

各タグを手動で指定する必要があります。

<tag>
    <tag-name>myComponent</tag-name>
    <source>tags/mylib/myComponent.xhtml</source>
</tag>

何か不足していますか?タグ定義の場所はどこで自動的に解決されますか? WebSphere 7.0MyFaces 2.0.7で実行しています。

4

1 に答える 1

2

ここで物事を混同していると思います。上記のブログ投稿で、次のように複合コンポーネントをタグ lib に追加しました。

<facelet-taglib>
  <namespace>http://jsflive.at/taglib</namespace>
  <composite-library-name>jsflive</composite-library-name>
</facelet-taglib>

これにより、リソース ライブラリのすべての複合コンポーネントが で指定された名前で追加されcomposite-library-nameます。タグ名は、慣例によりファイル名から派生します。

反対に、Facelets フラグメントのタグを指定します。

<tag>
  <tag-name>myComponent</tag-name>
  <source>tags/mylib/myComponent.xhtml</source>
</tag>

これは複合コンポーネントとは関係ありません。このアプローチは、Facelets フラグメントのカスタム タグを定義する JSF 2.0 以前の方法です。コードは、参照される xhtml ファイルのタグを作成します。これは、任意の Facelets ファイルである可能性があります。この場合、パスはtaglib.xmlファイルの場所に対する相対パスです。

ただし、JSF 2.2 では、特定の複合コンポーネントのタグを指定する方法が提供されます。私の投稿http://jsflive.wordpress.com/2013/04/06/jsf22-cc-taglib/は、これがどのように機能するかを示しています。

于 2013-04-30T08:03:33.163 に答える