H:commandLink不点火的form.submit事件(h:commandLink not f

2019-09-26 10:38发布

当我的页面加载我执行下面的JS脚本,我用它来显示一个弹出说(请稍候...)任何形式的提交时。

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

的commandButton标签,但是当我使用h:使用h当这工作得很好commandLink标记这是行不通的,因为形式是由Java脚本(在罐子里的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 /资源/ javax.faces / jsf.jsjsf.js文件,并修改它触发形式使用jQuery提交方法。 这工作正常,但:

1)我不喜欢,我接触jsf.js文件,因为它可以在JSF的新版本改变的事实。

2)我不喜欢,我使用jQuery的jsf.js文件中的事实。

有没有更好的解决办法来解决这个问题呢?

Answer 1:

您应该使用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');
    }
})();


Answer 2:

作为Bodgan提出了一个更好的解决方案是执行下面的一段时,页面加载代码,我不知道这个词是什么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);
  };
};


文章来源: h:commandLink not firing the form.submit event