【问题标题】:Pass javascript code to Custom Control将 javascript 代码传递给自定义控件
【发布时间】:2012-04-24 05:47:25
【问题描述】:

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

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

compositeData.codessjs.invoke(facesContext, null)

但尽管 XPage 源代码中存在代码,但它仍向我抛出错误 'compositeData.codessjs' is null。如何让代码执行?

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

【问题讨论】:

    标签: xpages


    【解决方案1】:

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

    <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>
    

    希望对你有帮助

    斯文

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-11-24
        • 2018-07-18
        • 1970-01-01
        • 1970-01-01
        • 2014-01-16
        • 1970-01-01
        • 2021-12-28
        相关资源
        最近更新 更多