SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

オープンソースApache Tuscanyで楽しむSOA

オープンソースApache Tuscanyで楽しむSOA
第4回「Web2.0から始めましょう(Atom編)」

トスカーナワイン店の買い物かごにワインを追加します


ダウンロード サンプルコード (18.5 KB)

買い物かごからワインから外す機能を実装する

 次に、買い物かごからワインを外す処理を実装します。追加処理で説明したとおり、ワインリストでチェックボックスを外した場合、displayBasket関数の判定で図7のremoveItemFromBasket関数が呼び出されます。この関数の中でbasket.delが呼び出されると、サーバ側のBasketImplオブジェクトのdeleteメソッドが呼び出されます。これで買い物かごから、選択したワインがなくなります。

図7:BasketImplのdeleteメソッド
図7:BasketImplのdeleteメソッド

買い物かごを表示するには

 買い物かごにワインを入れたり出したりする処理は紹介しましたが、クライアント画面にどのようにして買い物かごを表示するのかはまだ説明していません。買い物かごへのワインの出し入れや、かごの中のワインの本数を変更した後、どのようにして買い物かごを表示するかを説明します。

 まず、JavaScriptは明示的に戻り値という考えはありません。Javaだと「A[] aList = b.getA(x)」と定義した場合、bオブジェクトのgetAメソッドは引数としてxのみ指定すればよいのですが、サーバ側のスタブとしての関数の引数は、第1引数がxとなり、最後の引数が戻り値を扱う関数となります。従って、postdeleteの場合は、第2引数が戻り値の関数、putの場合は第3引数が戻り値の引数となります。図8のように第2引数、第3引数を関数として宣言する必要があります。ただし、今回の場合、戻り値を使って何か行うわけではないため、それぞれの関数の第1引数は空文字を設定しています。肝心なのは第2引数でbasket_getResponseを指定していることです。この関数が買い物かごを表示するための関数なのです。

図8:post、put、deleteから呼び出されるbasket_getResponse関数
図8:post、put、deleteから呼び出されるbasket_getResponse関数

 当サンプルアプリケーションでは、買い物かごに対する「登録」「変更」「削除」操作はすべて、Ajaxを通じて自動的に買い物かごに反映されます。従って、postputdeleteメソッドの最後は、買い物かごを表示するためにbasket_getResponset関数を呼び出しているわけです。図9がその実装です。

図9:basket_getResponse関数
図9.basket_getResponse関数

買い物かごに入れたワインの本数を変更する

 続いて、買い物かごに入っているワインの本数を変更する機能を実装します。送料と合計金額はAtomではなくJSONを使っているので、この後で説明します。

 ワインの本数を変更するには、変更したい銘柄の本数の値を変え、本数の入力欄からマウスが離れた時、onBlur関数が呼び出されるタイミングでcalItemTotal関数を呼び出し、サーバ側とのやりとりを行います。引数にはワインの銘柄名と変更した本数の値を渡します。銘柄名をもとにワインリストを検索し、一致するワインの価格を取得します。また、サーバ側の変更メソッドであるputはWineItemを要求しますが、クライアント側ではpostの時と同様、entry要素の文字列を生成し、第2引数として渡します。これら2つの引数が準備できたら、サーバ側のBasketImpleのスタブであるbasketのputメソッドを呼び出します。後はAjaxで処理され、サーバ側のワインの本数が更新されます。図10のcallItemTotal関数がクライアント側の実装で、図11のputメソッドがサーバ側の実装です。

図10:calItemTotal関数
図10:calItemTotal関数
図11:BasketImplのputメソッド
図11:BasketImplのputメソッド

次のページ
送料、合計金額はJSONで実装

この記事は参考になりましたか?

オープンソースApache Tuscanyで楽しむSOA連載記事一覧

もっと読む

この記事の著者

川久保 智晴(カワクボ トモハル)

haruプログラミング教室(https://haru-idea.jp/)主宰。COBOL、FORTRANで13年、Javaを中心としたWeb開発で11年。3つしか言語知らないのかというとそうでもなく、sed/awk、Perl、Python, PHP,  C#, JavaScriptなども一時期は業...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/4332 2009/11/25 14:06

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー