TOPシステム開発> どのようなビューを表示するかを定義する
Nexaweb Studio
Nexaweb Studioで手軽にリッチクライアントアプリケーション開発

第4回:Format_サーバ側との連携を実現する

著者:チェンジビジョン  岩永 寿来、豆蔵  長谷川 裕一
2007/6/19
前のページ  1  2  3  4
どのようなビューを表示するかを定義する

   最後にコントローラがリクエストを処理した結果、どのようなビューを表示するかを定義する(リスト8-④)。しかしビューの定義は「hokkaien-servlet.xml」には定義せず、「views-hokkaido.properties(リスト9)」として別のファイルに定義されている。これは一般的なプロパティファイルで、キー「menudatasource」の値としてProductsXmlViewクラスを定義しているだけだ。
リスト9:views-hokkaido.properties
リスト9:views-hokkaido.properties
(画像をクリックすると別ウィンドウに拡大図を表示します)

   それではコントローラProductControllerの実装を見てみよう(リスト10)。リスト10-(1)でURLとfindAllProduct.htmへのリクエストを処理する「handleFindAllProduct」メソッドが定義されている。このメソッドでは「ProductService」オブジェクトを参照しているが、このオブジェクトはリスト10-④のセッターと、リスト8-⑤の定義を用いて、SpringのDIコンテナからインジェクションされるのだ。

リスト10:ProductController
リスト10:ProductController
(画像をクリックすると別ウィンドウに拡大図を表示します)

   それではもう一度、リスト10-(1)のhandleFindAllProductメソッドを見てほしい。リクエストを処理したのち、ModelAndViewオブジェクトを戻しているのがわかるだろうか。このModelAndViewオブジェクトの第1引数に「view-hokkaien.properties」で定義されているキー「menudatasource」を指定し、第2引数と第3引数ではビューに引き渡すモデルを指定している。この例ではProductServiceから取得した商品の一覧を「products」という名前でビューに引き渡している。

   最後にビューを見てほしい。ここでは「handleFindAllProduct」メソッドの戻り値と「ModelAndView」オブジェクトによって、「ProductsXmlView(リスト11)」が呼び出されている。

リスト11:ProductsXmlView
リスト11:ProductsXmlView
(画像をクリックすると別ウィンドウに拡大図を表示します)

   ProductXmlViewでは、ModelAndViewにセットされた商品の一覧を取得し(リスト11-(1))、「XStream」というライブラリを利用してオブジェクトをXMLとしてレスポンスに流し込んでいる(リスト11-(2))。これで商品一覧を取得するというリクエストに対するNexawebとSpringとの連携の流れができたことになる。ここまでの処理をまとめてみよう。

  1. Nexawebで作成した注文画面から、商品の一覧を取得するfindAllProduct.htmへリクエストする

  2. DispatcherServletはfindAllProduct.htmへのリクエストをProductControllerのhandleFindAllProductメソッドに振り分ける

  3. ProductControllerのhandleFindAllProductメソッドで、ProductServiceを利用して商品の一覧をトランスファーオブジェクトProductToの集合として取得する

  4. そしてhandleFindAllProductメソッドは、そのProductToの集合を、"menudatasource"というキーでマッピングされているビューに引き渡すことを表すModelAndViewオブジェクトをDispatcerServletに戻す

  5. DispatcherServletは"menudatasource"というキーでマッピングされているProductsXmlViewを呼び出す

  6. ビューであるProductsXmlViewでは、商品の一覧からXMLデータを作成し、レスポンスにセットする

  7. 注文画面はfindAllProduct.htmへリクエストした結果、つまりXMLデータを取得する

表1:ここまでの処理のまとめ

   次に注文画面でfindAllProduct.htmへリクエストし、取得された商品一覧のXMLデータを元にメニューテーブルを表示してみよう(リスト12)。前回products.xmlからデータを取得していたデータソースの定義は、リスト12-(1)のようにfindAllProduct.htmから取得するとする。そしてリスト12-(2)のように、前回同様「id="products"」で定義されたobjectDataSource(リスト12-(1)からXMLデータを取得してメニューテーブルを表示すれば、データベースから取得したメニューが表示されることになる。

リスト12:注文画面
リスト12:注文画面
(画像をクリックすると別ウィンドウに拡大図を表示します)


まとめ

   今回はUIに表示する値を整形してくれるフォーマッタとSpringを利用したクライアント側とサーバ側との連携を説明してきた。ここではSpringを例にしたが、Strutsのような他のMVCフレームワークと連携することも容易である。Springを用いればDIコンテナによってサーバ側のクラスの依存関係を疎に保つことやトランザクション管理などのSpringの多彩な機能を利用できる。しかもSpringにはStrutsやHibernate、iBATISといったデータアクセスフレームワークとの連携も用意されているので、Nexawebと連携させるパートナーとしてSpringは非常に魅力的なフレームワークといえるだろう。

   次回はサーバ側との連携をより理解するため、商品を注文するリクエストの処理について再度説明し、さらにNexawebの特徴的な機能の1つである「メッセージング」について説明する予定だ。

前のページ  1  2  3  4


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


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


INDEX
第4回:Format_サーバ側との連携を実現する
  サンプルから学ぶ、Nexawebの機能
  サーバ側との連携
  NexawebとSpringとの連携
どのようなビューを表示するかを定義する