2011-06-09 25 views
8

我正嘗試在我的應用程序中更加動態地調用JSF函數。手動將回調函數寫入oncomplete事件的靜態方式,我希望發送一個回調函數作爲參數,並使其在oncomplete函數的事件中調用。這裏有一個例子:向JSF a4j發送回調:jsFunction oncomplete事件

<script type="text/javascript"> 
    myFunc('myParamValue', function(){ 
    doThis(); 
    andDoThis(); 
    }); 
</script> 

<a4j:jsFunction name="myFunc" actionListener="#{...}" data="" oncomplete=""> 
    <f:param name="myParam" /> 
    <f:param name="callback" /> 
</a4j:jsFunction> 

我想問一問,這將有可能通過使用a4j:jsFunctiondata屬性?事情是這樣的:

... 
data="#{myBean.callback}" 
oncomplete="if (typeof window[event.data] == 'function') window[event.data]();" 
... 

回答

6

嘗試這樣:

// Page 

<a4j:jsFunction name="callScript" data="#{bean.someProperty1}" 
     reRender="someComponent" 
     oncomplete="execute(data.callback)"> 

     <a4j:actionparam name="something" assignTo="#{bean.something}"/> 
     <a4j:actionparam name="callback" assignTo="#{bean.callback}"/> 

</a4j:jsFunction> 

// JS 

function testFunction() { 
    alert("It works!"); 
} 

function execute(funcName) { 
    //is no namespace use window 
    window[funcName](); 
} 

//call 
callScript("param1", "testFunction"); 
2

試試這個:

<a4j:jsFunction name="callScript" data=".." 
    reRender="someComponent" 
    oncomplete="foo(data,request)"> 

    <a4j:actionparam name="something" assignTo="#{bean.something}"/> 
    <a4j:actionparam name="callback" /> 

和js

function foo(data,request) { 
var callback =request.options.parameters.callback ; 
callback(data); 
}