2012-04-24 12 views
1

javascriptコード(サーバー側とクライアント側)をカスタムコントロールに渡す必要があります。カスタムコントロール内のボタンをクリックして実行する必要があります。javascriptコードをカスタムコントロールに渡す

カスタムコントロールでは、codessjsという名前のプロパティをタイプjavax.faces.el.MethodBindingで作成し、メソッドバインディングエディタとしてエディタを作成しました。 (カスタムコントロール内)ボタンをクリックするだけで、私はこのようなコードを書いた:

compositeData.codessjs.invoke(facesContext, null)

しかし、それはのXPageのソースに存在するコードにもかかわらず、エラー'compositeData.codessjs' is null私をスローします。実行するコードを取得するにはどうすればよいですか?

クライアント側の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!を印刷します。をサーバーコンソールに追加します。

EDIT:
CSJSプロパティの型は文字列です。あなたのXPageで

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

、カスタムコントロールのプロパティがこのように充填することができる:あなたはこのような何かにカスタムコントロールに、ボタンを変更することができCSJSコードを実行するには

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

希望これは

に役立ちます

Sven

0

JavaScript評価機能を試しましたか?これはserverSide JSで動作します。

関連する問題