1

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

为此,我在自定义控件中创建了一个属性,例如codessjs,类型javax.faces.el.MethodBinding和编辑器作为方法绑定编辑器。单击按钮(在自定义控件内)我编写了如下代码:

compositeData.codessjs.invoke(facesContext, null)

但是,'compositeData.codessjs' is null尽管 XPage 源代码中存在代码,但它仍然给我一个错误。如何让代码执行?

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

4

2 回答 2

5

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

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

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

编辑:
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>

希望这可以帮助

斯文

于 2012-04-24T09:52:24.200 回答
0

你试过 JavaScript eval 函数吗?它适用于服务器端 JS。

于 2012-05-02T05:47:12.703 回答