libro
www.tuyano.com
初心者のためのGroovy/Grails入門

ダイナミックファインダーによる検索 (5/5)

作成:2013-11-09 11:35
更新:2013-11-09 11:35

■ソートとページング

ダイナミックファインダーでは、検索テキスト以外のさまざまな検索に関する情報をリストにまとめて用意することで、検索条件以外の細かな情報を指定することができます。これにより、ソートやページングなどのための処理を追加することができます。

●ソート処理
ソート処理は、最後に以下のような形でオプション情報を追加することで実行できます。
[sort: 基準となるプロパティ名 , 
    order: "ascまたはdesc"]
例えば、nameで昇順に並べ替えるならば、[sort:"name", order:"asc"]という形でオプションを用意すればいいわけですね。

●ページング処理
多数のデータをページ分けして表示する「ページング」も、オプションを用意することで可能となります。
[offset: オフセット値 , max: 取得する最大数 ]
ページングというから何か?と思ったら、なーんだoffsetか、と思ったかも知れませんね。そう、つまり「何番目から取得するか(offset)」と、「最大何個取得するか(max)」を併用することでページングを簡単に実装できる、というわけです。


これらのオプションは、もちろんまとめて使うこともできます。下のリスト欄にfindメソッドのサンプルを上げておきましょう。ここではGETアクセス時にはnameの降順に、検索時にはageの降順に並べ替えます。表示される項目は5つで、URLに「&page=番号」とつけることで指定のページを表示します。実際にアクセスして、ソートとページングを確認してみてください。

ダイナミックファインダーの機能をひと通り使えるようになれば、基本的な検索はほぼ行えるようになるでしょう。もちろん、更に複雑な検索を行う必要に迫られることもあるでしょうが、一般的なWebアプリケーションなら、案外、ここで紹介した機能だけで事足りるんじゃないでしょうか。

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

※ソート・ページング表示

def find = {
    def fstr = params.fstr;
    def page = params.page;
    def max = 5;
    def datas = null;
    def msg = null;
    if (!page){ page = 0; }
    else { page = Integer.parseInt(page); }
    if (fstr == null){
        datas = SampleData.findAll([sort:"name", order:"desc", offset:page * max, max:max]);
        msg = "全レコード一覧です。";
    } else {
        datas = SampleData.findAllByNameLike("%" + fstr + "%", [sort:"age", order:"desc", offset:page * max, max:max]);
        msg = "name like '%" + fstr + "%' のレコード一覧です。";
    }
    def arr = [
        'title':"Show All",
        'msg':msg,
        'datas':datas
    ];
    arr;
}
※関連コンテンツ

「初心者のためのGroovy/Grails入門」に戻る