2016-03-28 3 views
0

Я пытаюсь избавиться от встроенного javascript, который создает mojarra для использования политики заголовка x-content-security. Это заголовок, который отключает встроенный скрипт.Не удается вызвать mojarra.ab (это, evt, 'action', false, false, false);

Для этого я добавляю класс к кнопке jsfajax, и я в основном добавляю слушателя onclickevent к элементу, который носит этот класс. Затем я вызываю mojarra.ab в этом слушателе событий. Однако исходный параметр имеет значение null, и я думаю, поэтому я не могу перейти к методу в своем компоненте.

HTTP запрос ФОРМА 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; 
    } 
} 

Так посылается запрос, но он никогда не достигает метода действия.

Однако это делает (и источником является БТН):

<h:commandButton value="go2" action="#{test.sayHi}"> 
    <f:ajax/> 
</h:commandButton> 

ответ

0

В конце запроса() есть:

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> тега контейнера добавляет идентификатор к элементу, который вызывает чувство, когда он представляет собой прямую форму. Идентификатор не нужен, когда нет f: ajax, поэтому не проходит запрос() -. Который не найден в jsf.ajax.request.

Так что я просто сделал это:

e.onclick = function(evt, e){ 
    this.id = this.name; 
    mojarra.ab(this,evt,'action',0,0); 
    return false; 
} 

Я не уверен, если это может привести к какому-либо вопросу, хотя. Иначе я просто поставлю идентификатор в свою кнопку.