我正在尝试摆脱mojarra创建的使用标头x-content-security-policy的内联javascript。这是一个禁用内联脚本的标题。
为了做到这一点,我在一个名为 jsfajax 的按钮中添加了一个类,我基本上为一个穿着该类的元素添加了一个onclickevent监听器。然后我在那个事件监听器中调用mojarra.ab。但是,source参数为null,我认为这就是为什么我无法访问我的bean中的方法。
HTTP请求FORM DATA:
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;
}
}
因此发送请求但它永远不会到达action方法。
然而这确实(而且来源是btn):
<h:commandButton value="go2" action="#{test.sayHi}">
<f:ajax/>
</h:commandButton>
答案 0 :(得分:0)
在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,因此不会通过请求() - 。在jsf.ajax.request中找不到。
所以我就这样做了:
e.onclick = function(evt, e){
this.id = this.name;
mojarra.ab(this,evt,'action',0,0);
return false;
}
我不确定这是否会导致任何问题。否则我会把id放在我的按钮上。