Python版GAEなら、開発サーバー上でも http://localhost:8080/_ah/admin/ でローカル環境用のDashboardを見ることができて便利なんだけど、どうやらJava版にはそれがないらしい(むしろあるのなら教えて下さい)。
せめてData Viewer的なものはローカル環境にも欲しい、ということで、中途半端なJSPで書いた。
編集も削除もできないけど、とにかく指定したKindのデータを全部一覧表示するように。
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %> <%@ page import="java.util.ArrayList" %> <%@ page import="java.util.List" %> <%@ page import="com.google.appengine.api.datastore.DatastoreService" %> <%@ page import="com.google.appengine.api.datastore.DatastoreServiceFactory" %> <%@ page import="com.google.appengine.api.datastore.Entity" %> <%@ page import="com.google.appengine.api.datastore.PreparedQuery" %> <%@ page import="com.google.appengine.api.datastore.Query" %> <% DatastoreService datastoreService = DatastoreServiceFactory.getDatastoreService(); String kind = request.getParameter("kind"); if (kind == null) { response.sendError(400); return; } Query query = new Query(kind); PreparedQuery preparedQuery = datastoreService.prepare(query); int count = preparedQuery.countEntities(); %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Datastore View</title> </head> <body> <h1><%= kind %></h1> <h2><%= count %>件</h2> <% if (count > 0) { out.println("<table border=\"1\">"); out.println("<tr>"); out.println("<th>key</th>"); List<String> properties = new ArrayList<String>(preparedQuery.asIterator().next().getProperties().keySet()); for (String property : properties) { out.println("<th>" + property + "</th>"); } out.println("</tr>"); for (Entity entity : preparedQuery.asIterable()) { out.println("<tr>"); out.println("<td>" + entity.getKey() + "</td>"); for (String property : properties) { out.println("<td>" + entity.getProperty(property) + "</td>"); } out.println("</tr>"); } out.println("</table>"); } %> </body> </html>
リクエストでkind=
プロパティを取得するのに、Query結果の1件目からgetProperties()のkeySet()を使っているので、1件目のEntityに存在するプロパティしか羅列できない。予めすべてのEntityのプロパティをなめていってもいいけど…まぁ必要な場合は、ですかね。
Queryを弄ってやれば、表示順くらいはどうにかできるはず。
編集/削除はそれ用のサーブレット作ってやらないことにはどうしようもない。JSP内で処理できなくもないかもしれないけど、かなり汚くなるだろうし。