Come ri-eseguire la function javascript dopo la forma reRender?

Ho bisogno di eseguire nuovamente JavaScript solo dopo che il module viene ripreso. Semplicemente, mettendo in javascript dopo i contenuti XHTML non aiuterà dal momento che una sua richiesta parziale. Inoltre, non posso utilizzare "onComplete" come il commandButton da cui sto ri-rendering forma è nel componente JSF utilizzato in diversi luoghi. Devo get la correzione in loco.

C'è qualche modo? Stavo chiedendo se f: ajax avrebbe aiutato in questo caso.

Fathemes sapere se qualcuno ne ha un'idea.

Il modo più semplice è quello di mettere la chiamata di function JS nel componente da aggiornare.

<h:form> ... <h:commandButton value="submit"><f:ajax render="@form" /></h:commandButton> <h:outputScript>someFunction();</h:outputScript> </h:form> 

In questo modo viene eseguito come carica della pagina e anche se il module viene aggiornato da ajax.

Quanto onevent <f:ajax> , si potrebbe anche utilizzare il suo attributo onevent .

 <f:ajax ... onevent="handleAjax" /> 

con

 function handleAjax(data) { var status = data.status; switch(status) { case "begin": // This is invoked right before ajax request is sent. break; case "complete": // This is invoked right after ajax response is returned. break; case "success": // This is invoked right after successful processing of ajax response and update of HTML DOM. someFunction(); break; } } 

È ansible aggiungere un hook globale da jsf.ajax.addOnEvent() modo che non sia necessario specificarlo in each singolo attributo onevent di <f:ajax> se il requisito funzionale si applica a each richiesta ajax.

 jsf.ajax.addOnEvent(handleAjax); 

Un'alternativa è quella di utilizzare la libreria di utilità OmniFaces JSF che offre <h:onloadScript> per questo scopo. Puoi metterlo nella testa così vuoi.

 <h:onloadScript>someFunction();</h:onloadScript> 

Questo viene automaticamente ridisegnato su each singola richiesta ajax della vista in modo che non sia necessario copiarlo su più punti singoli nella vista che possono essere aggiornati da ajax o ripetere l'ID parentale in each <f:ajax render> .

La prima risposta di BalusC è la più appropriata se si desidera eseguire operazioni complesse con JQuery / JS e non sono particolarmente preoccupati per questo

Per JS più complessi, se si decide di utilizzare un gestore di events globale e, ad esempio, si utilizza JS per bind funzioni agli elementi, queste funzioni verranno nuovamente associate (quindi eseguite due volte), quindi è necessario disporre di un modo per identificare le esigenze per essere ri-eseguito.

Quello che finalmente ho fatto è stato quello di get l'id dalla callback dell'evento e eseguire solo il relativo JS / JQuery:

 jsf.ajax.addOnEvent(ajaxCompleteProcess); function ajaxCompleteProcess(data) { if (data.status && data.status === 'success') { var children1 = data.responseXML.children; for (i = 0; i < children1.length; i += 1) { var children2 = children1[i].children; for (j = 0; j < children2.length; j += 1) { var children3 = children2[j].children; for (y = 0; y < children3.length; y += 1) { if (children3[y].id.indexOf('javax.faces.ViewState') != -1) continue; elementProcess(('#' + children3[y].id.replace(/\:/g, '\\:'))); } } } } } 

Nota: questi brutti for loops sono probabilmente non necessari (potresti usare i clild [0]), ma non ho ancora trovato il tempo per controllare la spec.

Potresti aggiungere jQuery all'applicazione e fare qualcosa di simile:

 $(#yourComponentId).load(function(){ //execute javascript. }); 

Potete dare un'occhiata qui http://api.jquery.com/load/

LE: quello che sta su

 $(document).ready(function(){ } 

ofc.