プログラムリスト
このサンプルではJavaBeansからデータストアにアクセスしているので、そこから見ていきたいところですが、図1構成のアクセスの順序に従って、view機能に対応するWebクライアント(HTML+JavaScript)から見ていきます。ただし、Webクライアントとサーブレットはデータストア・アクセスには直接関係しない部分なので簡単に見ていきます。
1. HTML&JavaScript View -> Controller
<!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <title>App Engine Cloud SQL 部品情報管理</title> <script type="text/javascript" src="../jslib/jquery-1.7.1.min.js"></script> <script type="text/javascript"> var mode = "add"; var query = {}; query["table"] = "item_info"; $(function(){ $("#item_no").focus(); $("#exe").click(function(e){ //(1) query["mode"] = mode = $('input[name="op"]:checked').val(); //(2) query["item_no"] = $("#item_no").val(); if(mode=="rev"){ //(3) $.get("/bomsvlt", query, function(json){ var dat = $.parseJSON(json); $("#status").text(dat.status); $("#item_name").val(dat.item_name); $("#final_flag").val(dat.final_flag); $("#vendor_no").val(dat.vendor_no); $("#vendor_name").val(dat.vendor_name); }); }else if (mode=="add" || mode=="upd"){ //(4) query["item_name"] = $("#item_name").val(); query["final_flag"] = $("#final_flag").val(); query["vendor_no"] = $("#vendor_no").val(); query["vendor_name"] = $("#vendor_name").val(); $.post("/bomsvlt", query, function(resp){ $("#status").html(resp); }); }else if(mode=="del"){ //(5) $.post("/bomsvlt", query, function(resp){ $("#status").text(resp); }); } }); }); </script> </head> <body> <table width="350" border="1" cellpadding="0" class="b1" bgcolor="#eeeeff"> <thead id="crud"> <tr height="23"><th class="t4" colspan="2">App Engine Cloud SQL 部品情報管理</th></tr> <tr height="23"> <th colspan="2"> <input type="radio" name="op" value="add" checked="checked" />登録 <input type="radio" name="op" value="rev" />参照 <input type="radio" name="op" value="upd" />更新 <input type="radio" name="op" value="del" />削除 <input type="button" id="exe" value=" 実行 "/> </th> </tr> </thead> <tbody id="data"> <tr> <th width="150">部品番号</th> <td><input type="text" size="12" id="item_no"/></td> </tr> <tr><th>部品名</th><td><input type="text" id="item_name"/></td></tr> <tr><th>ファイナル</th><td><input type="text" size="2" id="final_flag"/></td></tr> <tr><th>ベンダNO</th><td><input type="text" size="24" id="vendor_no"/></td></tr> <tr><th>ベンダ名</th><td><input type="text" size="34" id="vendor_name"/></td></tr> <tr><th height="23">ステータス</th><td id="status"> </td></tr> </tbody> </table> </body> </html>
リスト1のitemInfoCrud1.htmはCloud SQL用のCRUD処理画面ですが、サーバへの非同期通信などで、jQueryを使用しています。ラジオボタンから処理内容を指定した後、画面データを入力し、「実行」ボタンをクリックすると(1)の匿名関数が起動されます。匿名関数内では、(2)でCRUD処理モードを取得し、その値に従って(3)で参照、(4)で登録または更新、(5)で削除処理のリクエストをjQueryの非同期通信($.getおよび$.post)を使用してサーバに送信しています。
Bigtableアクセス用の画面もこれとまったく同じものを使用していますが、サーブレット側で処理の切り分けを行うために、ラジオボタンのvalue値を、add_kv2、rev_kv、upd_kv2、del_kvのように変えてあります。