无法设法调用mojarra.ab(this,evt,'action',false,false,false);

时间:2016-03-28 13:58:38

标签: javascript jsf jsf-2.2

我正在尝试摆脱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>

1 个答案:

答案 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放在我的按钮上。