当我的页面加载我执行下面的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.js的jsf.js文件,并修改它触发形式使用jQuery提交方法。 这工作正常,但:
1)我不喜欢,我接触jsf.js文件,因为它可以在JSF的新版本改变的事实。
2)我不喜欢,我使用jQuery的jsf.js文件中的事实。
有没有更好的解决办法来解决这个问题呢?
您应该使用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');
}
})();
作为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);
};
};