ダイナミックファインダーによる検索 (1/5)
作成:2013-11-09 11:21
更新:2013-11-09 11:21
更新:2013-11-09 11:21
■検索処理の準備を整えよう
データベースから必要なデータを取り出す――これはデータベース利用の基本です。これまで、「IDを指定して取り出す」「全部取り出す」といったことはやりましたが、それ以外の「何らかの条件を指定して取り出す」ということができないと困ります。
Grailsで検索を行うとき、もっとも重要な機能が「ダイナミックファインダー」でしょう。これはドメインモデルのフィールド名(プロパティ名)などを元に自動的に生成される検索機能です。
Grailsでは、ドメインクラスとデータベーステーブルを関連付けるためのO/Rマッパーとして「GORM」というライブラリを用意しています。ダイナミックファインダーは、GORMのもっとも重要な機能なのです。このダイナミックファインダーをマスターすれば、検索の9割はおそらく実現できるはずです。
まずは、検索処理のための基本的な枠組みを作っておきましょう。「find」というアクションを用意することにしましょう。
下に、コントローラーに実装するfindメソッドのサンプルと、ビューテンプレートであるfind.gspのサンプルを挙げておきます。findメソッドは、とりあえず全レコードを取り出す処理を書いてあります。これを書き換えて、さまざまな検索を行ってみましょう。
find.gsp側には、検索テキストを送信するフォームと、取得したレコードの一覧を表示するテーブルを用意してあります。これで基本的な枠組みは完成です。
Grailsで検索を行うとき、もっとも重要な機能が「ダイナミックファインダー」でしょう。これはドメインモデルのフィールド名(プロパティ名)などを元に自動的に生成される検索機能です。
Grailsでは、ドメインクラスとデータベーステーブルを関連付けるためのO/Rマッパーとして「GORM」というライブラリを用意しています。ダイナミックファインダーは、GORMのもっとも重要な機能なのです。このダイナミックファインダーをマスターすれば、検索の9割はおそらく実現できるはずです。
まずは、検索処理のための基本的な枠組みを作っておきましょう。「find」というアクションを用意することにしましょう。
下に、コントローラーに実装するfindメソッドのサンプルと、ビューテンプレートであるfind.gspのサンプルを挙げておきます。findメソッドは、とりあえず全レコードを取り出す処理を書いてあります。これを書き換えて、さまざまな検索を行ってみましょう。
find.gsp側には、検索テキストを送信するフォームと、取得したレコードの一覧を表示するテーブルを用意してあります。これで基本的な枠組みは完成です。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
※コントローラーのfindメソッド
def find = {
def fstr = params.fstr;
def datas = SampleData.getAll();
def arr = [
'title':"Show All",
'msg':"検索結果一覧です。",
'datas':datas
];
arr;
}
※find.gsp
<!DOCTYPE html>
<html>
<head>
<meta name="layout" content="mylayout" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Grails Hello</title>
</head>
<body>
<h1>${title}</h1>
<h2>${msg}</h2>
<form method="post" action="create">
<table>
<tr><td>検索:</td><td><input type="text" name="fstr"></td></tr>
<tr><td></td><td><input type="submit"></td></tr>
</table>
</form>
<table>
<g:each in="${datas}" status="i" var="data">
<tr>
<td>${data.name}</td>
<td>${data.mail}</td>
<td>${data.age}</td>
</tr>
</g:each>
</table>
</body>
</html>
※関連コンテンツ