2011-06-09 57 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); 
}