1

すべてのJSFページはサーバー側で同等のHTMLに変換され、レンダリングのためにクライアントに送信されるため、クライアント側のJQueryはHTMLを取得して再レンダリングします。

理論的には、JSFによって生成されたHTMLを取得し、それをJQueryにラップすることは可能であるはずです。そうであれば、それがどのように行われるかを知りたいと思います。特に、可能であればJSF実装としてRichFacesを使用します。

<rich:dataTable id="table">          
  <rich:column>

  </rich:column>
</rich:dataTable>

上記のJSFのスニペットは、これと同等のHTMLに変換されます。

<table id="table">
  <tr>
    <td></td>
  </tr>
</table>

このようなことをすることは可能ではないはずです

<script type="text/javascript">
   $(document).ready(function () {
     $('#table').dataTable();
}
</script>

私はすでにそれを試しましたが、うまくいかないようです。

ですので、何かヒントがありましたら、よろしくお願いします。

4

3 に答える 3

3

JSFとjqueryを混在させることは可能ですが、いくつかの落とし穴があります。

JSFがIDを引き継ぐため、テーブルがID "form"のフォームにある場合、htmlの実際の要素IDはデフォルトで "form:table"になります。jqueryはセレクターのコロンに問題がある可能性があると思うので、テーブルにクラスのマークを付けて、それで選択することができます。

<rich:dataTable styleClass="my-table">          
  <rich:column>

  </rich:column>
</rich:dataTable>

セレクターを次のように設定します。

<script type="text/javascript">
   $(document).ready(function () {
     $('.my-table').dataTable();
}
</script>
于 2012-05-09T11:53:33.787 に答える
2

JSFコンポーネントのIDは、階層上のコンテナのIDを:区切り文字で組み合わせることによって生成されます。すべてのコンテナがカウントされるわけではありません。ルールを正確に覚えていません。

通常、一部のJSFライブラリには、リッチフェイスのコンポーネントIDを取得するためのクライアント側APIがあります。

とにかく、jQueryベースのJSFを使用したい場合は、primefacesを見てください。

お役に立てれば。

于 2012-05-09T11:52:43.920 に答える
1

この問題は、Prototype.jsで作成されたJqueryとリッチフェイスコンポーネントによって発生した「$」の名前間隔の競合である可能性があります。jQuery.noconflict()メソッドを使用してみてください。jqueryをrichfacesで動作させるという同様の問題がありました。jquery.noconflict()でうまくいきました。

<script type="text/javascript">
  $.noConflict();
  jQuery(document).ready(function($) {
 // Code that uses jQuery's $ can follow here.
 });
// Code that uses other library's $ can follow here.
</script>

幸運を!

于 2012-05-15T14:07:49.820 に答える