複数モデルを連携処理する (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)プログラミング入門」に戻る