TOPシステム開発> MCOによるクライアント側での情報保持
Nexaweb Studio
Nexaweb Studioで手軽にリッチクライアントアプリケーション開発

第5回:Nexaweb StudioでHelloWorldを表示させる

著者:チェンジビジョン  岩永 寿来、豆蔵  長谷川 裕一
2007/6/28
1   2  3  4  次のページ
MCOによるクライアント側での情報保持

   前回はSpringFrameworkを用いたサーバ側との連携の仕方を説明した。今回は前回説明しきれなかったクライアント側での情報保持の仕方や画面遷移の仕方を説明していこう。

   一般的なWebアプリケーションでは、セッションを利用して複数の画面にまたがる情報を保持している。Nexawebでもセッションを利用することは可能だが、クライアント側でイベントやデータの加工などの処理を行えるMCO(Managed Client Object)に情報を保持しておくこともできる。

   それを実現するためには、まず最初に表示される画面「index.nxml」にリスト1-(1)のようにMCOを定義する。他のNXMLファイルでMCOを定義することも当然可能だが、他のファイルへの遷移が呼び出されるたびにMCOのインスタンスが生成されてしまうので気をつけたい。
リスト1:MCOの定義
リスト1:MCOの定義
(画像をクリックすると別ウィンドウに拡大図を表示します)

   NexawebのUIはツリー構造で構成されており、ツリー構造上にあるUIを削除して別のUIをツリーに追加することで画面遷移など画面の見た目を変更することができる。このUIのツリー構造のルート要素は「rootPane」と呼ばれ、1つのアプリケーションに1つだけ用意されている。従ってrootPaneが作成されるindex.nxmlでMCOを定義すれば、そのMCOのインスタンスは一度しか生成されない。つまり、ある意味グローバルに定義されたMCOを用いて情報を保持させることができるのだ。


画面遷移の仕方

   前回のサーバ側との連携では、画面に表示するためのデータを「サーバから取得する方法」と「ボタンが押されたときにサーバにリクエストを送る方法」の2つを説明した。今回はボタンが押された後に画面遷移をどのように行えばよいかを説明しよう。もちろんNexawebでは画面遷移を「クライアント側」「サーバ側」どちらでも制御できる。

   リッチクライアントではないWebアプリケーションの開発に慣れていると、すべての画面遷移をサーバ側で管理したくなるかもしれない。現存するWebアプリケーションを、極力手をかけずにNexawebへ移行したい場合には、その方法もよいかもしれない。

   しかし、せっかくの「リッチクライアント」なのだから、クライアント側で決められる画面遷移はクライアントで管理する方がよいはずだ。クライアントで管理できることをわざわざ「サーバ側ですべて管理する」、もしくは逆に「すべてをクライアント側で管理する」ことなど、管理をクライアントかサーバのどちらかにしてしまうと、メリットよりも複雑な設計・実装に陥ったり、パフォーマンスの劣化を招くといったデメリットが多くなってしまう。

   前回、注文画面(order.nxml)の「注文をする」ボタンを押した際に、MCOを呼び出してMCOからorder.htmへのリクエストを行う方法を説明した(図1)。この例を用いて、まずはクライアント側での画面遷移の仕方を説明する。

「注文をする」ボタンからのリクエスト
図1:「注文をする」ボタンからのリクエスト


クライアント側で画面遷移を制御する

   前回はクライアント側からサーバ側へリクエストを送付するためには、NetServiceクラスのretrieveメソッドを利用している。そこで今回は「retrieveAndProcess」メソッドを利用してみよう。

   このretrieveAndProcessメソッドは、リクエストの結果を待って、その結果を受けて画面を更新する場合に利用するものである。retrieveAndProcessメソッドを用いた画面遷移の方法はリスト2のように「order.htm」へリクエストを送信し、そのあと「postorder.nxml」ファイルへのリクエストを送信するだけである。

リスト2:クライアント側での画面遷移
ClientSession cs = getSession();
NetService ns = cs.getNetService();
try {
    ns.retrieveAndProcess("order.htm");    ----(1)
    ns.retrieveAndProcess("postorder.nxml");---(2)
} catch (NetServiceException e) {
・・・エラーハンドリング・・・
}

   MCOからの画面遷移の仕方はこのような方法をとるのだが、「第2回:簡単に設定できる『Event Wizard』」の「画面遷移を作る」でも説明したように、ボタンなどUIのイベント発生時にnxmlファイルを指定してもよい。どのようにするかは、イベント発生時にバリデーションや計算などの処理をしたい/したくないかという判断から、MCOで「画面遷移を制御する」か「イベントで制御する」か決まるだろう。

   また前回説明していなかったが、サーバへリクエストを送信する際にパラメータを渡したい場合は、リスト3のようにURLに埋め込むことで実現できる。

リスト3:リクエスト時にパラメータを渡す例
ClientSession cs = getSession();
NetService ns = cs.getNetService();
HttpRequest request = ns.createHttpRequest("order.htm?quantity=1234");
ns.retrieveAndProcess(request);

1   2  3  4  次のページ


株式会社チェンジビジョン 岩永 寿来
著者プロフィール
株式会社チェンジビジョン  岩永 寿来
モデリングツールJUDEを開発しているチェンジビジョンで、ソフトウェア開発プロジェクトの見える化を支援するTRICHORDを開発している。最近は2DやJOGLなど3D技術に興味があり、クールなUIやエフェクトを日々探求している。共著として「Spring入門(技術評論社)」、「Spring2.0入門(技術評論社)」。


株式会社豆蔵 長谷川 裕一
著者プロフィール
株式会社豆蔵  長谷川 裕一
XMLの技術開発やCORBA、EJBを使用したシステム開発などを経て、現在はアジャイル開発プロセスの導入から工学的なソフトウエアプロセスの策定、オープンソースプロダクトに関するコンサルタント、アーキテクトとして常に第一線で活躍。共著として「プログラムの育てかた 現場で使えるリファクタリング(ソフトバンク)」、「Spring入門(技術評論社)」。


INDEX
第5回:Nexaweb StudioでHelloWorldを表示させる
MCOによるクライアント側での情報保持
  サーバ側で画面遷移を制御する
  メッセージング
  Subscriberの作成と登録