24.2. Seam オブジェクト
クライアント側からのコンポーネントとのやりとりは
remote.js で定義される Seam Javascript オブジェクトで行われます。 コンポーネントに対する非同期呼び出しに使用されます。 オブジェクトはコンポーネントと連携するメソッドを含む Seam.Component そしてリモート要求を実行するメソッドを含む Seam.Remoting の 2 つの機能に区分されます。 このオブジェクトに精通する最も容易な方法は簡単なサンプルから始めることです。
24.2.1. Hello World サンプル リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
手順24.1 Hello World の例
Seamオブジェクトがどのように動作するかを見るために、 まずhelloActionと呼ばれる新しい Seam コンポーネントを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 新しいコンポーネント用にローカルのインターフェースも生成する必要があります。
@WebRemoteアノテーションはリモーティングでメソッドへのアクセスを可能にするために必要となるので特に注意してください。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 記述する必要があるサーバー側のコードはこれだけです。次に新しい Web ページを作成して
helloActionコンポーネントをインポートします。<s:remote include="helloAction"/>
<s:remote include="helloAction"/>Copy to Clipboard Copied! Toggle word wrap Toggle overflow - このページにボタンを追加して対話式のユーザーエクスペリエンスにします。
<button onclick="javascript:sayHello()">Say Hello</button>
<button onclick="javascript:sayHello()">Say Hello</button>Copy to Clipboard Copied! Toggle word wrap Toggle overflow - また、 ボタンをクリックしたときに動作を実行するスクリプトが必要になります。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - アプリケーションをデプロイしてページを見てみます。 ボタンをクリックしてプロンプトが出たら名前を入力します。 呼び出しが成功であることを確認する「Hello」メッセージがメッセージボックスに表示されます (Seam の
/examples/remoting/helloworldディレクトリにこの Hello World サンプルの全ソースコードがあります)。
Javascript コードから 2 つのメソッドを実装していることがわかります。 最初のメソッドはユーザーに対して名前を入力するよう促しリモート要求を行います。 以下の行を見てみましょう。
Seam.Component.getInstance("helloAction").sayHello(name, sayHelloCallback);
Seam.Component.getInstance("helloAction").sayHello(name, sayHelloCallback);
この行の最初の部分 (
Seam.Component.getInstance("helloAction")) は helloAction コンポーネントのプロキシまたは スタブ を返します。 この行の残りの部分 (sayHello(name, sayHelloCallback);) はスタブに対してコンポーネントのメソッドを呼び出します。
コード行全体で行っていることは、 コンポーネントの
sayHello メソッドを呼び出し、 パラメータとして name を渡しています。2 番目のパラメータ sayHelloCallback はこのコンポーネントの sayHello メソッドのパラメータではありません。 Seam Remoting フレームワークは、要求に対する応答を受けたらそれを sayHelloCallback Javascript メソッドに渡されるべきことを指示しています (このコールバックパラメータはオプションとなるため、 void 戻りタイプでメソッドを呼び出している場合、または要求の結果を気にする必要がない場合は、 そのままにしておいて構いません)。
sayHelloCallback メソッドがリモート要求に対する応答を受け取ると、メソッド呼び出しの結果を表示する警報メッセージを表示します。