連載
» 2009年02月16日 00時00分 公開

TERASOLUNAのタグで検索結果ページリンクを簡単にオープンソースTERASOLUNAで作るWebアプリ(4)(1/2 ページ)

[佐々木高洋,株式会社NTTデータ]

TERASOLUNAフレームワークの応用

 前回の「iBATISのORMとSpringのAOPを活用したDBアクセス」までで、TERASOLUNA Server Framework for Java Web版(以下、TERASOLUNAフレームワーク)の基本的な仕組みを使ってみました。今回からは応用編として、TERASOLUNAフレームワークが持っているWebアプリケーション開発に便利な機能を紹介します。

編集部注:TERASOLUNA Server Framework for Java」を含むTERASOLUNA全体について詳しく知りたい読者は、特集「Java、.NET、Ajax開発の“銀の弾丸”オープンソース?」をご覧ください。

 今回紹介する機能はDB検索結果の一覧表示機能です。これまでと同様に、実際にWebアプリケーションを構築しながら機能を使っていきましょう。

構築環境について

 いままでの連載と同じく、TERASOLUNAフレームワークのブランクプロジェクトを使用します。連載第3回で作成したプロジェクトでも問題ありません。

 DBはHSQLDBを使用します。前回紹介したhsqldb.zipを解凍してインストールすると、「USERLIST」というテーブルがありますので、これを利用します。インストールや設定の方法などは前回の記事を参照してください。

フィールド名 データ型 サイズ 制約
ID BIGINT - 非NULL
NAME VARCHAR 50 -
AGE VARCHAR 3 -
BIRTH VARCHAR 10 -
表 USER_LISTテーブルの仕様(※BIRTH列は今回は使用しません)

DBの照会結果画面を簡単に作成できる「一覧表示機能」

 多くのWebアプリケーションには、データベース(以下、DB)を照会して結果を表示する画面があります。普通は、1ページに全結果を表示するのではなく、以下のような画面にします。

図1 DB照会結果の画面例(※ページリンク:「1 2 3 4 …」などの、ほかの照会結果ページ遷移用リンクのことを、TERASOLUNAでは「ページリンク」と呼んでいます) 図1 DB照会結果の画面例(ページリンク:「1 2 3 4 …」などの、ほかの照会結果ページ遷移用リンクのことを、TERASOLUNAでは「ページリンク」と呼んでいます)

・照会結果を(1ページ当たりの表示行数に応じて)複数ページに分割する
・ほかの照会結果ページへのリンクを張る

 TERASOLUNAフレームワークには、このような画面を簡単に作成できる「一覧表示機能」が用意されています。この一覧表示機能を使って、USERLISTテーブルを照会する「ユーザー一覧画面」を作ってみましょう。

サンプルの実装概要

 一覧表示機能には、いくつかの実装方式がありますが、今回は以下のような実装にします。

  1. ページリンクをクリックすると、以下の情報をリクエストする
    • 開始インデックス(全照会結果の何番目から取得するか)
    • 1ページの表示件数(何レコード取得するか)
  2. 業務ロジックはリクエストされた情報でDBを検索して、照会結果を返す
図2 サンプルの実装概要 図2 サンプルの実装概要

追加・変更するファイル

 ブランクプロジェクトに追加・変更するファイルは、以下のとおりです。

図3 追加・変更するファイル 図3 追加・変更するファイル

ユーザー一覧を表示するための情報を定義

 一覧表示するための情報として、Struts設定ファイルのアクションフォーム定義に以下を追加します。

リスト1 struts-config.xml(form-bean要素)
<form-bean name="_form"
  type="jp.terasoluna.fw.web.struts.form.DynaValidatorActionFormEx">

  <!-- 【1】 -->
  <form-property name="startIndex" type="java.lang.String" initial="0"/>

  <!-- 【2】 -->
  <form-property name="row" type="java.lang.String" initial="10"/>

  <!-- 【3】 -->
  <form-property name="users" type="sample2.UserBean[]" />

  <!-- 【4】 -->
  <form-property name="totalCount" type="java.lang.String"/>
</form-bean>

【1】データの開始インデックス(全照会結果の何番目から必要か)
【2】1ページ表示件数(何レコード取得するか)
【3】1ページ分の照会結果データ
【4】全データ件数

 ユーザー一覧画面(list.jsp)には、照会結果を表示する一覧表と、ページリンクを記述します。

リスト2 list.jsp
<%@ page contentType="text/html; charset=Windows-31J"%>
<%@ taglib uri="/struts-html" prefix="html"%>
<%@ taglib uri="/struts-bean" prefix="bean"%>
<%@ taglib uri="/struts-logic" prefix="logic"%>
<%@ taglib uri="/terasoluna-struts" prefix="ts"%>
<%@ taglib uri="/terasoluna" prefix="t"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html:html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=shift_jis">
  <title>ユーザー照会画面</title>
</head>
<ts:body>
  登録ユーザー一覧
  <table border="1" frame="box">
    <tr>
    <th>ID</th>
    <th>名前</th>
    <th>年齢</th>
    </tr>

    <!-- 【5】 -->
    <logic:iterate id="user" name="_form" property="users">
      <tr>
      <td><bean:write name="user" property="userId" /></td>
      <td><bean:write name="user" property="userName" /></td>
      <td><bean:write name="user" property="age" /></td>
      </tr>
    </logic:iterate>
  </table>

  <!-- 【6】 -->
  <ts:pageLinks action="/listBL" name="_form" rowProperty="row"
    totalProperty="totalCount" indexProperty="startIndex" />
  <br/>

  <!-- 【7】 -->
  <bean:write name="currentPageIndex" />/
  <bean:write name="totalPageCount" />ページ
  (全部で<bean:write name="_form" property="totalCount"/>件)
  <br/>
</ts:body>
</html:html>

【5】一覧表を作成
【6】TERASOLUNAのタグライブラリによりページリンクを作成
【7】「現在ページ」「全ページ」を表示

 タグ<ts:pageLinks>は、「開始インデックス」「1ページ表示件数」「総件数」の情報からページリンクを生成します。また、現在ページと全ページ数の値をそれぞれ「currentPageIndex」「totalPageCount」としてページコンテキストに格納します。

 Struts設定ファイルのaction-mappings要素に、業務ロジックと画面の遷移先情報を記述します。

リスト3 struts-config.xml(action-mappings要素)
<action path="/listBL" name="_form" scope="session">
  <forward name="success" path="/listSCR.do"/>
</action>
<action path="/listSCR" parameter="/list.jsp" />

 次ページでは、そのほかの必要なファイルを作成し、サンプルを動かしてみます。

       1|2 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。