【问题标题】:Can't manage to call mojarra.ab(this,evt,'action',false,false,false);无法调用 mojarra.ab(this,evt,'action',false,false,false);
【发布时间】:2016-07-15 19:18:38
【问题描述】:

我正在尝试摆脱 mojarra 创建的内联 JavaScript 以使用标头 x-content-security-policy。这是一个禁用内联脚本的标头。

为了做到这一点,我向一个名为 jsfajax 的按钮添加了一个类,并且我基本上为佩戴该类的元素添加了一个 onclickevent 侦听器。然后我在那个事件监听器中调用 mojarra.ab。但是源参数为空,我认为这就是为什么我无法访问我的 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>

【问题讨论】:

    标签: javascript jsf jsf-2.2


    【解决方案1】:

    在 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();
    

    这是因为在添加 &lt;f:ajax&gt; 标记时,容器会向元素添加一个 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 放在我的按钮中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-22
      • 2014-03-18
      • 2021-09-05
      • 2018-02-23
      • 2017-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多