サーブレットの作成
では、フォームの送信先となるサーブレットを作りましょう。これは、送信されたフォームからID番号を受け取り、そのIDのオブジェクトを検索して、結果をHTMLのテキストにまとめてセッションに保管し、リダイレクトする、という処理になります。
package jp.allabout;
import java.io.*;
import java.util.List;
import javax.jdo.PersistenceManager;
import javax.servlet.http.*;
@SuppressWarnings("serial")
public class Gae_findServlet extends HttpServlet {
public void doGet(HttpServletRequest req,
HttpServletResponse resp)
throws IOException {
resp.setContentType("text/text");
req.setAttribute("result", "no data.");
}
@SuppressWarnings("unchecked")
public void doPost(HttpServletRequest req,
HttpServletResponse resp)
throws IOException {
resp.setContentType("text/html");
String id = req.getParameter("id");
PersistenceManager pm = PMF.get().getPersistenceManager();
String query = "select from " + SampleData.class.getName()
+ " where id == " + id;
List<SampleData> datas = (List<SampleData>) pm.newQuery(query).execute();
String result = "<div>ID = " + id + "</div>";
result += "<table border=\"1\">";
result += "<tr><th>ID</th><th>Message</th><th>Account</th><th>Date</th></tr>";
for(SampleData data : datas){
result += "<tr>";
result += "<td>" + data.getId() + "</td>";
result += "<td>" + data.getMessage() + "</td>";
result += "<td>" + data.getAccount() + "</td>";
result += "<td>" + data.getDate() + "</td>";
result += "</tr>";
}
result += "</table>";
req.getSession().setAttribute("result", result);
resp.sendRedirect("/find.jsp");
}
}
ここでは、doPostで検索の処理を行っています。基本的な処理の流れは、全オブジェクトの取得とほとんど同じです。違いは、用意するクエリーだけです。
String query = "select from " + SampleData.class.getName()
+ " where id == " + id;
このようになっていますね。「select from クラス名 where id = 番号」というクエリーを用意しています。これを実行することで、指定したIDのオブジェクトだけが取得されるようになります。