2012-04-24 27 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。

相關問題