向 JSF a4j:jsFunction oncomplete 事件发送回调

Posted

技术标签:

【中文标题】向 JSF a4j:jsFunction oncomplete 事件发送回调【英文标题】:Sending a callback to JSF a4j:jsFunction oncomplete event 【发布时间】:2011-09-11 13:35:15 【问题描述】:

我正在尝试使我的应用程序中对 JSF 函数的调用更加动态。我希望发送一个回调函数作为参数并使其在函数的oncomplete 事件中调用,而不是手动将回调函数写入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]();"
...

【问题讨论】:

【参考方案1】:

试试这样的:

// 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); 
 

【讨论】:

以上是关于向 JSF a4j:jsFunction oncomplete 事件发送回调的主要内容,如果未能解决你的问题,请参考以下文章

如何将参数值传递给 a4j:jsFunction

JSF2:从 Spring 向 managedbean 注入服务对象?

JSF:向操作方法添加参数后导航规则停止工作

向 JSF 2.0 UIInput 组件添加自定义属性 (HTML5) 支持

如何从jsf / primefaces中的托管bean向页面添加组件[重复]

如何在 websocket 服务器上向特定用户发送消息