フォーラムで質問するのはこれが初めてです。通常、私の質問は既に質問され、回答されています。私にとってうまくいくこの問題に対する答えが見つからなかったので、ここに行きます:
次のように、JSF 2.0 で Ajax 呼び出しを行っています。
< f :ajax listener="#{myReferenceController.clearRequiredReferenceNumber}"
onevent="resetFocus" execute="@form"
render=":resultsForm:ResultsDisplay" />
リスナー内のすべてが完全に機能し、.xhtml ページにあるデータ テーブルで期待どおりにデータがレンダリングされます。問題は、私が呼び出す Javascript がonevent
レンダリングが完了する前に呼び出されているように見えるため、私の列にフォーカスをリセットするプロセスがdatatable
機能しないdatatable
ことです。 Ajax の再レンダリングが終了したときの DOM。
この時点でレンダリングが完了していることを期待して、Javascript で「成功」のステータスを調べています。残念ながら、これは事実ではなく、私のgetElementById
(実際にはdojo.byId
)データテーブル内の要素が見つかりません。Ajax呼び出しがない状況でこの同じ関数を呼び出しているため、JavaScript関数が通常の状況で機能することはわかっており、すべてがそこで完全に機能します。
フォーカスを設定しようとしているテーブル内のセルのレンダリングを回避できれば、それは素晴らしいことですが、リスナーは ajax 呼び出しでこのセルに変更を加えています。私は機知に富んでいるので、これに関するアイデアは大歓迎です。
-- Balusc への返信 (ところで、あなたについて良いことを聞きました)
うーん、私は実際には正しい軌道に乗っていたと思いますが、まだ問題が発生しているようです. 「成功」を確認していますが、まだ成功していても、ここに焦点を合わせることができません。「成功」をチェックしている私の Javascript 関数は次のとおりです。この関数は、Ajax イベントに関連付けられていない別の状況で機能します。
function resetFocus(data) {
var theRow = dojo.byId("resultsForm:selectedRow").value;
if (data.status == "success") {
dojo.query('[widgetId]',dojo.byId('theResultsDataTable'))
.forEach(function(node) {
var widget = dijit.byNode(node);
var theId = widget.attr("id")
if (theId.indexOf(':' + theRow + ':') != -1) {
if (theId.indexOf('theOrppoNum') != -1) {
widget.focus();
widget.attr("isFocused",true);
}
}
});
}
}