无法调用 mojarra.ab(this,evt,'action',false,false,false);
Can't manage to call mojarra.ab(this,evt,'action',false,false,false);
我正在尝试摆脱 mojarra 创建的使用 header x-content-security-policy 的内联 javascript。这是一个禁用内联脚本的 header。
为了做到这一点,我将一个 class 添加到一个名为 jsfajax 的按钮,我基本上将一个 onclickevent 侦听器添加到佩戴该 class 的元素.然后我在该事件侦听器中调用 mojarra.ab 。但是 source 参数为 null,我认为这就是为什么我无法访问我的 bean 中的方法的原因。
HTTP 请求表单数据:
j_idt240:j_idt240
javax.faces.ViewState:-xxxxxxxxxxxxxx3:xxxxxxxxxxxx7022321
javax.faces.source:
javax.faces.partial.event:click
javax.faces.partial.execute:j_idt240:j_idt241
javax.faces.behavior.event:action
javax.faces.partial.ajax:true
<h:commandButton styleClass="jsfajax" value="go" action="#{test.sayHi}">
JS:
var es = doc.getElementsByClassName('jsfajax');
for(var i = 0; i < es.length; i++){
myjsf(i, es);
}
});
function myjsf(i , es){
var e = es[i];
e.onclick = function(evt){
log(this); // outputs the button so I don't understand + jsf.ajax.request doesn't throw error
mojarra.ab(this,evt,'action',0,0);
return false;
}
}
因此请求已发送但从未到达操作方法。
但是这样做(来源是 btn):
<h:commandButton value="go2" action="#{test.sayHi}">
<f:ajax/>
</h:commandButton>
在 request() 的末尾有:
var sendRequest = function() {
var ajaxEngine = new AjaxEngine(context);
ajaxEngine.setupArguments(args);
ajaxEngine.queryString = viewState;
ajaxEngine.context.onevent = onevent;
ajaxEngine.context.onerror = onerror;
ajaxEngine.context.sourceid = element.id;
ajaxEngine.context.render = args[namingContainerId + "javax.faces.partial.render"];
ajaxEngine.sendRequest();
这是因为在添加 <f:ajax>
标签时,容器会向元素添加一个 ID - 当它是直接表单提交时,这有点有意义,当没有 f:ajax 时不需要 ID ,因此不会通过 request()- 。在 jsf.ajax.request.
中找不到
所以我就这样做了:
e.onclick = function(evt, e){
this.id = this.name;
mojarra.ab(this,evt,'action',0,0);
return false;
}
不过我不确定这是否会导致任何问题。否则我会把 id 放在我的按钮中。
我正在尝试摆脱 mojarra 创建的使用 header x-content-security-policy 的内联 javascript。这是一个禁用内联脚本的 header。
为了做到这一点,我将一个 class 添加到一个名为 jsfajax 的按钮,我基本上将一个 onclickevent 侦听器添加到佩戴该 class 的元素.然后我在该事件侦听器中调用 mojarra.ab 。但是 source 参数为 null,我认为这就是为什么我无法访问我的 bean 中的方法的原因。
HTTP 请求表单数据:
j_idt240:j_idt240
javax.faces.ViewState:-xxxxxxxxxxxxxx3:xxxxxxxxxxxx7022321
javax.faces.source:
javax.faces.partial.event:click
javax.faces.partial.execute:j_idt240:j_idt241
javax.faces.behavior.event:action
javax.faces.partial.ajax:true
<h:commandButton styleClass="jsfajax" value="go" action="#{test.sayHi}">
JS:
var es = doc.getElementsByClassName('jsfajax');
for(var i = 0; i < es.length; i++){
myjsf(i, es);
}
});
function myjsf(i , es){
var e = es[i];
e.onclick = function(evt){
log(this); // outputs the button so I don't understand + jsf.ajax.request doesn't throw error
mojarra.ab(this,evt,'action',0,0);
return false;
}
}
因此请求已发送但从未到达操作方法。
但是这样做(来源是 btn):
<h:commandButton value="go2" action="#{test.sayHi}">
<f:ajax/>
</h:commandButton>
在 request() 的末尾有:
var sendRequest = function() {
var ajaxEngine = new AjaxEngine(context);
ajaxEngine.setupArguments(args);
ajaxEngine.queryString = viewState;
ajaxEngine.context.onevent = onevent;
ajaxEngine.context.onerror = onerror;
ajaxEngine.context.sourceid = element.id;
ajaxEngine.context.render = args[namingContainerId + "javax.faces.partial.render"];
ajaxEngine.sendRequest();
这是因为在添加 <f:ajax>
标签时,容器会向元素添加一个 ID - 当它是直接表单提交时,这有点有意义,当没有 f:ajax 时不需要 ID ,因此不会通过 request()- 。在 jsf.ajax.request.
所以我就这样做了:
e.onclick = function(evt, e){
this.id = this.name;
mojarra.ab(this,evt,'action',0,0);
return false;
}
不过我不确定这是否会导致任何问题。否则我会把 id 放在我的按钮中。