複数モデルを連携処理する (6/6)
作成:2010-05-07 17:16
更新:2010-05-10 17:41
更新:2010-05-10 17:41
■MygaeServletの修正
では、データを取得しindex.htmlにお繰り返しているMygaeServletを修正しましょう。下にソースコードを掲載しておきます。
ここでは、全LinkDataか、あるいは指定されたIDのLinkDataを検索し、その内容をJSONデータにして出力するようにしています。ここでの、指定IDのLinkDataを取り出して内容をJSONデータにまとめる部分を見てみると、
このへんになってくると、モデルクラスの内容をJSONデータに変換する処理がかなり長くなってしまいますが、まぁこれは、今回の一連のサンプルがすべてAjaxでデータを取得するようにしているためです。単純にサーブレットにアクセスして全部その場で出力するなら、もっとシンプルに作れるでしょう。
GAEでは、JSPも使えますから、「JavaScriptは面倒くさい」という人は、JSPを使い、セッションなどでLinkDataやMsgDataを直接JSPに渡して表示させるなどするとよいでしょう。
ここでは、全LinkDataか、あるいは指定されたIDのLinkDataを検索し、その内容をJSONデータにして出力するようにしています。ここでの、指定IDのLinkDataを取り出して内容をJSONデータにまとめる部分を見てみると、
LinkData data = (LinkData)manager.getObjectById(LinkData.class,Long.parseLong(param1));こんな具合になっています。for(MsgData msg:msgdatas)というように繰り返しを使い、data.getMsgDatasされたList内からMsgDataを取り出し、その内容を配列にまとめて書き出しています。これで、LinkDataの中に、関連するMsgDataを配列としてまとめたJSONデータができあがります。
List<MsgData> msgdatas = data.getMsgDatas();
res = "[";
res += "{id:" + data.getId() + ",url:'" + data.getUrl() + "',title:'" +
data.getTitle() + "',date:'" + data.getDatetime() +
"',comment:'" + data.getComment() + "',messages:[";
for(MsgData msg:msgdatas){
res += "{id:" + msg.getId() + ",comment:'" + msg.getComment() + "'},";
}
res += "]}]";
このへんになってくると、モデルクラスの内容をJSONデータに変換する処理がかなり長くなってしまいますが、まぁこれは、今回の一連のサンプルがすべてAjaxでデータを取得するようにしているためです。単純にサーブレットにアクセスして全部その場で出力するなら、もっとシンプルに作れるでしょう。
GAEでは、JSPも使えますから、「JavaScriptは面倒くさい」という人は、JSPを使い、セッションなどでLinkDataやMsgDataを直接JSPに渡して表示させるなどするとよいでしょう。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
package jp.tuyano; import java.io.*; import java.util.*; import javax.jdo.*; import javax.servlet.http.*; @SuppressWarnings("serial") public class MygaeServlet extends HttpServlet { private static final long serialVersionUID = 1L; public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { PersistenceManagerFactory factory = PMF.get(); PersistenceManager manager = factory.getPersistenceManager(); resp.setCharacterEncoding("UTF-8"); resp.setContentType("text/html"); req.setCharacterEncoding("utf-8"); String param1 = req.getParameter("id"); PrintWriter out = resp.getWriter(); List<LinkData> list = null; String res = null; if (param1 == null || param1 ==""){ String query = "select from " + LinkData.class.getName(); try { list = (List<LinkData>)manager.newQuery(query).execute(); } catch(JDOObjectNotFoundException e){} res = "["; for(LinkData data:list){ res += "{id:" + data.getId() + ",url:'" + data.getUrl() + "',title:'" + data.getTitle() + "',date:'" + data.getDatetime() + "',comment:'" + data.getComment() + "'},"; } res += "]"; } else { try { LinkData data = (LinkData)manager.getObjectById(LinkData.class,Long.parseLong(param1)); List<MsgData> msgdatas = data.getMsgDatas(); res = "["; res += "{id:" + data.getId() + ",url:'" + data.getUrl() + "',title:'" + data.getTitle() + "',date:'" + data.getDatetime() + "',comment:'" + data.getComment() + "',messages:["; for(MsgData msg:msgdatas){ res += "{id:" + msg.getId() + ",comment:'" + msg.getComment() + "'},"; } res += "]}]"; } catch(JDOObjectNotFoundException e){} } out.println(res); manager.close(); } }
※関連コンテンツ
「Google App Engine for Java(GAE/J)プログラミング入門」に戻る