1

ページが読み込まれると、次の JS スクリプトを実行します。これを使用して、フォームが送信されたときに (しばらくお待ちください...) というポップアップを表示します。

jQuery(function(){
  jQuery("form").submit(function(){jQuery('#wait-link').trigger('click');return true;});
});

これは、h:commandButton タグを使用すると正常に機能しますが、 h:commandLinkタグを使用すると、フォームが Java スクリプトによって (jar jsf-impl.jar 内のファイル jsf.js から) 送信されるため、機能しません。下

mojarra.jsfcljs = function jsfcljs(f, pvp, t) {
  mojarra.apf(f, pvp);
  var ft = f.target;
  if (t) {
    f.target = t;
  }
  f.submit();
  f.target = ft;
  mojarra.dpf(f);
};

この問題を解決するために、WEB-INF/resources/javax.faces/jsf.js の下にあるjsf.jsファイルをコピーし、 jQuery を使用してフォーム送信メソッドをトリガーするように変更しました。これはうまくいきますが:

1) JSF の新しいリリースでは変更される可能性があるため、 jsf.jsファイルに触れているという事実は好きではありません。

2) jsf.jsファイル内で jQuery を使用しているという事実が気に入らない。

この問題を解決するためのより良い解決策はありますか?

4

2 に答える 2

2

jsf.ajax.*JSF2 仕様の一部として標準であるため、を使用する必要があります。そこには、例えばjsf.ajax.addOnEvent(callback)、あなたが望むことをするものがあります。

リスナーをフックしたら、好きなだけ jQuery を使用できます。

アップデート:

独自の JS から傍受したい場合は、それらのものに触れることなく、次のことができます。

(function() {
    var oldjsfcljs = mojarra.jsfcljs;

    mojarra.jsfcljs = function() { 
        console.log('my stuff before');
        oldjsfcljs.apply(this, arguments);
        console.log('my stuff after');
    }
})();
于 2011-09-27T12:58:30.640 に答える
1

ボドガンが提案したように、より良い解決策は、ページが読み込まれたときに次のコードを実行することです.JSでこの用語が何であるかはわかりませんが、私にとってはオーバーライドのようです.

jQuery(function(){
  var oldjsfcljs = mojarra.jsfcljs; // save a pointer to the old function

  mojarra.jsfcljs = function jsfcljs(f, pvp, t) {
    jQuery(jq(f.id)).trigger('submit');
    oldjsfcljs.apply(this, arguments);
  };
});

function jq(myid) {
  return '#' + myid.replace(/(:|\.)/g, '\\$1');
}

注: jq() メソッドは、フォーム ID の特殊文字をエスケープするためにのみ使用されます。

更新:上記のコードは機能しているように見えましたが、フォームにパラメーターがある場合は機能しないため、mojarra.jsfcljs 関数を次のように書き直す必要がありました。

jQuery(function(){
  mojarra.jsfcljs = function jsfcljs(f, pvp, t) {
    mojarra.apf(f, pvp);
    var ft = f.target;
    if (t) {
      f.target = t;
    }

    // trigger the submit event manually.
    jQuery(jq(f.id)).trigger('submit');

    f.submit();
    f.target = ft;
    mojarra.dpf(f);
  };
};
于 2011-09-27T14:47:01.240 に答える