ちょっと遅れましたが、私は同じ問題を抱えていました。jsf ロジックが完了する前に ajax がレンダリングされます。私の解決策は?さて、確認ダイアログを追加しました。技術的な解決策ではないことはわかっていますが、うまくいきます。ユーザーがダイアログで [OK] を押すと (約 1 秒かかります。この間にロジックが実行されます)、コンポーネントがレンダリングされます。幸運を祈ります。
変更前:
<h:commandButton action="#{bean.buisnessLogic(param1, param2)}">
<f:ajax
execute="components"
render="table"
/>
</h:commandButton>
変更後:
<h:commandButton onclick="javascriptCofirm();" action="#{bean.buisnessLogic(param1, param2)}">
<f:ajax
execute="components"
/>
</h:commandButton>
<h:commandButton id="button" style="display: none">
<f:ajax
render="table"
/>
</h:commandButton>
JavaScript:
function javascriptConfirm() {
bootbox.alert("Se agrego la accion con exito.", function () {
var boton = document.getElementById("button");
boton.click();
});
e.preventdefault();
return false;
}
私がしたこと:
わかりましたので、変更が行われる前に。私の commandButton は、レジスタが追加される前にテーブルをレンダリングします。たとえば、行 2 を追加すると、ページが更新されるか行 3 が追加されるまで変更が表示されません。私はいくつかの調査を行い、jsf は ajax タグを JavaScript に変換し、JavaScript はアクションが完了するのを待たずにコードを直接実行するという結論に達しました。
解決:
だから今、私はajaxからrender属性を削除し、別のcommandButtonを作成し、新しいcommandButtonにrenderを追加します。javascriptConfirm メソッドがボタンを呼び出して「クリック」します。これによりページがレンダリングされますが、ビジネス ロジックが完了していることを確認するまでには. そうそう。これはおそらく紛らわしいです。あなたがコメントしたものは何でも、私はできるだけ早く対応しようとします(おそらくそれほど速くはありません).