无法调用 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 放在我的按钮中。