SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Groovy+GrailsでRailsなWeb開発

GroovyとGoogle App Engineでアプリ開発(後編)
~Googleのサービスを利用する方法

Groovy+GrailsでRailsなWeb開発 番外編 後編

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())
				}
			}
		}
	}
}
保存されたSampleDataを一覧表示
保存されたSampleDataを一覧表示

 ここでは、ボディ部分で「List<SampleData> datas = new ListBean().getList()」というようにしてListBeangetListを呼び出し、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>

次のページ
削除のフォームを用意する

この記事は参考になりましたか?

Groovy+GrailsでRailsなWeb開発連載記事一覧

もっと読む

この記事の著者

掌田 津耶乃(ショウダ ツヤノ)

三文ライター&三流プログラマ。主にビギナーに向けたプログラミング関連の執筆を中心に活動している。※現在、入門ドキュメントサイト「libro」、カード型学習サイト「CARD.tuyano.com」を公開...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/4193 2009/08/20 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー