libro
www.tuyano.com
Google App Engine for Java(GAE/J)プログラミング入門

複数モデルを連携処理する (4/6)

作成:2010-05-07 17:02
更新:2010-05-10 17:40

■AddMsgDataServletクラスの作成

では、/addmsgにマッピングされるAddMsgDataServletクラスを作成しましょう。下に、ソースコードを掲載しておきます。

ここでは、送られてきたIDパラメータとコメントのテキストを取り出し、MsgDataを作成して保存しています。が、注意したいのは、「関連するLinkDataも必要になる」という点です。すなわち、

1.取得したIDをもとに、LinkDataオブジェクトを取得する。
2.LinkDataをもとに、MsgDataインスタンスを作成する。
3.取得したLinkDataからMsgDataを保管するListを取得し、MsgDataを追加してまた元に戻す。
4.MsgDataを保存し、closeして終わり。

このように、MsgDataだけでなく、関連付けるLinkData側もデータの修正をする必要があります。双方向に関連付けを行う場合、このようにお互いを修正しなければいけません。


※なお、LinkDataクラスにも、新たにListを保管するフィールドを追加したので、AddLinkDataServletクラスも、new ArrayListをフィールドに設定するなど修正しておく必要があります。このへんは、それぞれでやっといてください。

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

package jp.tuyano;

import java.io.IOException;
import java.net.URL;
import java.util.*;

import javax.jdo.*;
import javax.servlet.ServletException;
import javax.servlet.http.*;

public class AddMsgDataServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	@Override
	protected void doGet(HttpServletRequest req,
			HttpServletResponse resp)
			throws ServletException, IOException {
		resp.setContentType("text/plain");
		resp.getWriter().println("no url...");
	}

	@Override
	protected void doPost(HttpServletRequest req,
			HttpServletResponse resp)
			throws ServletException, IOException {
		req.setCharacterEncoding("UTF-8");
		long id = Long.parseLong(req.getParameter("id"));
		String message = req.getParameter("message");
		Date date = Calendar.getInstance().getTime();
		PersistenceManagerFactory factory = PMF.get();
		PersistenceManager manager = factory.getPersistenceManager();
		LinkData linkdata = (LinkData)manager.getObjectById(LinkData.class,id);
		MsgData data = new MsgData(linkdata,message,date);
		List<MsgData> msgdatas = linkdata.getMsgDatas();
		msgdatas.add(data);
		linkdata.setMsgDatas(msgdatas);
		try {
			manager.makePersistent(data);
		} finally {
			manager.close();
		}
		resp.sendRedirect("/index.html");
	}
}
※関連コンテンツ

「Google App Engine for Java(GAE/J)プログラミング入門」に戻る