|
||||||||||||
| 1 2 3 4 次のページ | ||||||||||||
| MCOによるクライアント側での情報保持 | ||||||||||||
|
前回はSpringFrameworkを用いたサーバ側との連携の仕方を説明した。今回は前回説明しきれなかったクライアント側での情報保持の仕方や画面遷移の仕方を説明していこう。 一般的なWebアプリケーションでは、セッションを利用して複数の画面にまたがる情報を保持している。Nexawebでもセッションを利用することは可能だが、クライアント側でイベントやデータの加工などの処理を行えるMCO(Managed Client Object)に情報を保持しておくこともできる。 それを実現するためには、まず最初に表示される画面「index.nxml」にリスト1-(1)のようにMCOを定義する。他のNXMLファイルでMCOを定義することも当然可能だが、他のファイルへの遷移が呼び出されるたびに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();
MCOからの画面遷移の仕方はこのような方法をとるのだが、「第2回:簡単に設定できる『Event Wizard』」の「画面遷移を作る」でも説明したように、ボタンなどUIのイベント発生時にnxmlファイルを指定してもよい。どのようにするかは、イベント発生時にバリデーションや計算などの処理をしたい/したくないかという判断から、MCOで「画面遷移を制御する」か「イベントで制御する」か決まるだろう。 また前回説明していなかったが、サーバへリクエストを送信する際にパラメータを渡したい場合は、リスト3のようにURLに埋め込むことで実現できる。 リスト3:リクエスト時にパラメータを渡す例
ClientSession cs = getSession();
|
||||||||||||
|
1 2 3 4 次のページ |
||||||||||||
|
|
||||||||||||
|
|
||||||||||||
|
||||||||||||
|
|
||||||||||||
|
||||||||||||
|
|
||||||||||||
|
||||||||||||




