フォームが再レンダリングされた直後にjavascriptを再実行する必要があります。簡単に言うと、XHTMLコンテンツの後にjavascriptを挿入しても、部分的なリクエストであるため役に立ちません。また、フォームを再レンダリングするcommandButtonが、複数の場所で使用されるJSFコンポーネントにあるため、「onComplete」を使用できません。ローカルで修正を入手する必要があります。
何か方法はありますか?この場合、f:ajaxが役立つかどうか疑問に思いました。
手がかりがありましたらお知らせください。
BalusCの最初の答えは、JQuery/JSで複雑な操作を実行する場合に最も適切であり、特に this を気にしません
より複雑なJSの場合、グローバルイベントハンドラーを使用することを決定し、たとえば要素にJSをbind
関数に使用すると、これらの関数は再バインドされるため(2回実行されるため)、何を再実行する必要があるかを特定する方法。
私が最後に行ったのは、イベントコールバックからIDを取得し、関連するJS/JQueryのみを実行することでした。
jsf.ajax.addOnEvent(ajaxCompleteProcess);
function ajaxCompleteProcess(data) {
if (data.status && data.status === 'success') {
var children1 = data.responseXML.children;
for (i = 0; i < children1.length; i += 1) {
var children2 = children1[i].children;
for (j = 0; j < children2.length; j += 1) {
var children3 = children2[j].children;
for (y = 0; y < children3.length; y += 1) {
if (children3[y].id.indexOf('javax.faces.ViewState') != -1)
continue;
elementProcess(('#' + children3[y].id.replace(/\:/g, '\\:')));
}
}
}
}
}
注:これらの醜いfor
ループはおそらく必要ありません(clildren [0]を使用できます)が、仕様を確認する時間はまだありません。