SampleDataの一覧を表示するGroovlet
では、ListBeanを利用して、SampleDataの一覧を表示してみましょう。今回は、Groovletとして用意することにします。war/WEB-INF/groovyに「list.groovy」というファイルを作成し、次のようにソースコードを記述します。
import gae_app.SampleData
import java.util.List
html.doubleQuotes = true
html.html {
head {
title "SampleData List"
}
body {
h3 "SampleData List"
List<SampleData> datas = new ListBean().getList()
table(border:"1"){
for(SampleData ob:datas){
tr(){
td(ob.getId())
td(ob.getData())
}
}
}
}
}

ここでは、ボディ部分で「List<SampleData> datas = new ListBean().getList()」というようにしてListBeanのgetListを呼び出し、Listを取得しています。そして、for(SampleData ob:datas)で繰り返しを使い、その内容をテーブルに書き出します。Groovletは、このように直接実行する処理を記述することもできます。タグと制御文を組み合わせることで、このように内容を繰り返し出力したりできるわけです。
また、実際にやってみると分かりますが、こうして表示されたSampleDataの内容は、ちゃんと日本語も文字化けせずに表示されます。先に「GroovletやGSPでは日本語が化ける」という問題について説明しましたが、このようにBeanから取得したデータは、日本語も文字化けしないで表示されるのです。レイアウトと、実際に表示される値を分離して管理すれば、日本語の文字化け問題も解消するというわけです。
SampleDataの削除
追加と表示が行えたら、次に必要となるのは「削除」です。これもサーブレットとして削除処理を作成し、フォームから削除するSampleDataの情報を送信して処理させます。
では、「src」内に「DeleteServlet.groovy」というファイルを作成し、次のようにソースコードを記述してください。
import gae_app.SampleData
import javax.servlet.http.*
import javax.jdo.*
class DeleteServlet extends HttpServlet {
void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
resp.contentType = "text/plain"
resp.writer.println "**CANNOT ACCESS!!**"
}
void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
req.setCharacterEncoding("UTF-8")
Long id = Long.parseLong(req.getParameter("id"))
PersistenceManager pm = PMF.get().getPersistenceManager()
SampleData data = pm.getObjectById(SampleData.class, id)
try {
pm.deletePersistent(data)
} finally {
pm.close()
}
resp.sendRedirect("/list.groovy")
}
}
ここでは、req.getParameter("id")で削除するID番号をフォームから送ってもらい、そのIDのSampleDataを削除しています。ここでは、まず送られたIDの値をLongとして取得します。
Long id = Long.parseLong(req.getParameter("id"))
先にSampleDataクラスを定義したとき、Long idとして定義してありました。そこで、送られてきたStringをもとにLongを取得し、これを使って処理を行います。
PersistenceManager pm = PMF.get().getPersistenceManager()
例によって、PersistenceManagerインスタンスを取得します。そして、データストアから、削除するID番号のSampleDataインスタンスを取り出します。
SampleData data = pm.getObjectById(SampleData.class, id)
「getObjectById」は、引数にクラスとID番号を渡すと、それらに合致するオブジェクトを返すメソッドです。これで、指定したID番号のSampleDataインスタンスを取得しています。こうしてオブジェクトが得られたら、それをデータストアから削除します。
try {
pm.deletePersistent(data)
} finally {
pm.close()
}
「deletePersistent」は、引数に指定したオブジェクトを永続化された中から取り除きます(削除します)。そして、最後にcloseしてPersistenceManagerを開放し、処理は終わりです。
例によって、作成したサーブレットはweb.xmlに登録しておきます。ここでは/delというURIで公開します。
<servlet> <servlet-name>DeleteServlet</servlet-name> <servlet-class>DeleteServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>DeleteServlet</servlet-name> <url-pattern>/del</url-pattern> </servlet-mapping>
