5

JSF 2.1+ Web アプリケーションでは、ロードPrimeFaces 3.2後に JavaScript 関数をトリガーする必要がありますp:dataTable。このコンポーネントにはそのようなイベントがないことがわかっているので、回避策を見つける必要があります。

シナリオをよりよく理解するために、ページの読み込み時に dataTable はレンダリングされません。ログインが成功するとレンダリングされます。

<p:commandButton value="Login" update=":aComponentHoldingMyDataTable" 
                                    action="#{loginBean.login}" 
                                    oncomplete="handleLoginRequest(xhr, status, args)"/>

上記のコードからわかるように、ログインに成功した後に JavaScript フックを用意しました。このupdate属性は、dataTable のレンダリングされた属性を強制的に再評価します。

<p:dataTable  var="person" value="#{myBean.lazyModel}" rendered="#{p:userPrincipal() != null}" />

データテーブルが読み込まれた後、 cometDトピックをサブスクライブするために、各行項目で JavaScript 関数を実行する必要があります。

理論的には、dataTable に表示される値をもう一度取得するためにoncomplete、ログイン ボタンの属性を使用してプロパティをトリガーすることができますが、あまりエレガントではないようです。myBean

rowKeyJavaScript 関数は、dataTable の各行に対して何かを行う必要があります。

function javaScriptFunctionToBeTriggered(rowKey) {
    // do something
}
4

2 に答える 2

4

oncomplete属性の javascript メソッドは、ajax リクエストが終了した後、したがってdataTable がロードされた後に呼び出されます。

したがって、次のことができます。

<p:commandButton ... oncomplete="doSomething()"/>

そして、すべてがうまくいくはずです。

于 2012-06-11T11:21:58.700 に答える
0

ページがリロードされた場合は、準備ができているドキュメントを呼び出してみてください:

$(document).ready(function() {
    doSomething();
});
于 2014-05-06T14:55:31.550 に答える