2012-04-24 75 views
1

我需要将JavaScript代码(服务器端和客户端)传递给自定义控件,然后应该在点击自定义控件中的按钮时执行它。将javascript代码传递给自定义控件

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

compositeData.codessjs.invoke(facesContext, null)

但它引发我一个错误'compositeData.codessjs' is null尽管代码存在于XPage源代码。我怎样才能让代码执行?

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

回答

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> 

希望这有助于

Sven

0

您是否尝试了JavaScript eval函数?它适用于serverSide JS。

相关问题