serverListenerタグは、カスタムのクライアント・イベントが起動された際に実行する必要があるサーバー側のリスナーを登録する宣言的方法です。このタグはリッチ・クライアントでのみサポートされているため、サーバーでレンダリングされるすべてのコンポートに無視されます。ターゲット・メソッドはvoidを返し、1つの引数、ClientEventオブジェクトを受け取る必要があります。
クライアントからカスタム・イベントを起動するには、AdfCustomEvent.queue() Javascriptメソッドを使用します。
<source> /** * Convenience function for queueing an Custom event from a component. * @param {AdfUIComponent} Component to queue the custom event on * @param {String} the type of the event * @param {Object} a set of parameters to include on the event. Reserved * parameter names include "type" and "immediate". * @param (boolean) whether the custom event is "immediate" - which will * cause it to be delivered during Apply Request Values on the server, * or not immediate, in which case it will be delivered during * Invoke Application. * @final */ AdfCustomEvent.queue = function(component, type, params, immediate) { ... }
</source>
この例では、タイプがmyCustomEventのカスタム・イベントがこのコンポーネントに送信されると、サーバーのdoCustomEvent()メソッドを呼び出します。
<source> <script> var inputComp = someOtherComp.findComponent("myInput"); AdfCustomEvent.queue(inputComp, "myCustomEvent", // Send one parameter {skyIsFalling:false}, // Make it "immediate" on the server true); </script> <af:inputText clientComponent="true" id="myInput" value="Can send custom events"> <af:serverListener type="myCustomEvent" method="#{bean.doCustomEvent}"/> </af:inputText>
</source>
<source> public void doCustomEvent(ClientEvent event) { if (Boolean.TRUE.equals(event.getParameters().get("skyIsFalling"))) { ... ; } }
</source>
名前 | 型 | ELのサポート | 説明 |
---|---|---|---|
type | String | なし | リスニング対象のカスタム・クライアント側コンポーネント・イベントのタイプ。 |
method | String | 必須 | タイプのイベントでトリガーされると呼び出されるサーバー側のJavaメソッドを指すEL式。Javaメソッドはvoidを返し、1つの引数であるClientEventオブジェクトを受け取る必要があります。type |