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

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

当サンプルアプリケーションでは、買い物かごに対する「登録」「変更」「削除」操作はすべて、Ajaxを通じて自動的に買い物かごに反映されます。従って、post、put、deleteメソッドの最後は、買い物かごを表示するためにbasket_getResponset関数を呼び出しているわけです。図9がその実装です。
買い物かごに入れたワインの本数を変更する
続いて、買い物かごに入っているワインの本数を変更する機能を実装します。送料と合計金額はAtomではなくJSONを使っているので、この後で説明します。
ワインの本数を変更するには、変更したい銘柄の本数の値を変え、本数の入力欄からマウスが離れた時、onBlur関数が呼び出されるタイミングでcalItemTotal関数を呼び出し、サーバ側とのやりとりを行います。引数にはワインの銘柄名と変更した本数の値を渡します。銘柄名をもとにワインリストを検索し、一致するワインの価格を取得します。また、サーバ側の変更メソッドであるputはWineItemを要求しますが、クライアント側ではpostの時と同様、entry要素の文字列を生成し、第2引数として渡します。これら2つの引数が準備できたら、サーバ側のBasketImpleのスタブであるbasketのputメソッドを呼び出します。後はAjaxで処理され、サーバ側のワインの本数が更新されます。図10のcallItemTotal関数がクライアント側の実装で、図11のputメソッドがサーバ側の実装です。



