xpages – 将javascript代码传递给Custom Control

我需要将javascript代码(服务器端和客户端)传递给自定义控件,然后应该在自定义控件内的单击按钮上执行.

为此我在自定义控件中创建了一个属性,比如codessjs,类型为javax.faces.el.MethodBinding,编辑器为Method Binding Editor.在单击按钮(在自定义控件内)我写了这样的代码:

compositeData.codessjs.invoke(facesContext,null)

但它会抛出一个错误’compositeData.codessjs’为空,尽管XPage源代码中存在代码.如何让代码执行?

对于客户端javascript代码,我可以在自定义控件属性中找到编辑器客户端脚本编辑器,但属性的类型应该是什么?如何在自定义控件中执行csjs代码?

最佳答案
如果要以这种方式使用方法绑定,则必须创建方法绑定作为自定义控件的参数:

<xc:ccMethod>
   <xc:this.codessjs>
      <![CDATA[#{javascript:
         var app = facesContext.getApplication();
         app.createMethodBinding("#{javascript:print('HELLO!');}", null);
       }]]>
   </xc:this.codessjs>
</xc:ccMethod>

然后,您在自定义控件内的按钮可以调用该方法.
在这种情况下,按钮将打印你好!到服务器控制台.

编辑:
CSJS属性的类型是字符串.要执行CSJS代码,您可以将自定义控件中的按钮修改为以下内容:

<xp:button value="Label" id="button1">
   <xp:eventHandler event="onclick" submit="false">
      <xp:this.script><![CDATA[#{javascript:compositeData.codecsjs}]]></xp:this.script>
   </xp:eventHandler>
</xp:button>

在XPage中,可以通过以下方式填充自定义控件属性:

<xc:ccCSJS>
   <xc:this.codecsjs>
      <![CDATA[alert("ABC");]]>
   </xc:this.codecsjs>
</xc:ccCSJS>

希望这可以帮助

斯文

转载注明原文:xpages – 将javascript代码传递给Custom Control - 代码日志