前回の「iBATISのORMとSpringのAOPを活用したDBアクセス」までで、TERASOLUNA Server Framework for Java Web版(以下、TERASOLUNAフレームワーク)の基本的な仕組みを使ってみました。今回からは応用編として、TERASOLUNAフレームワークが持っているWebアプリケーション開発に便利な機能を紹介します。
今回紹介する機能はDB検索結果の一覧表示機能です。これまでと同様に、実際にWebアプリケーションを構築しながら機能を使っていきましょう。
いままでの連載と同じく、TERASOLUNAフレームワークのブランクプロジェクトを使用します。連載第3回で作成したプロジェクトでも問題ありません。
DBはHSQLDBを使用します。前回紹介したhsqldb.zipを解凍してインストールすると、「USERLIST」というテーブルがありますので、これを利用します。インストールや設定の方法などは前回の記事を参照してください。
フィールド名 |
データ型 |
サイズ |
制約 |
ID |
BIGINT |
- |
非NULL |
NAME |
VARCHAR |
50 |
- |
AGE |
VARCHAR |
3 |
- |
BIRTH |
VARCHAR |
10 |
- |
表 USER_LISTテーブルの仕様(※BIRTH列は今回は使用しません) |
多くのWebアプリケーションには、データベース(以下、DB)を照会して結果を表示する画面があります。普通は、1ページに全結果を表示するのではなく、以下のような画面にします。
図1 DB照会結果の画面例(※ページリンク:「1 2 3 4 …」などの、ほかの照会結果ページ遷移用リンクのことを、TERASOLUNAでは「ページリンク」と呼んでいます)
・照会結果を(1ページ当たりの表示行数に応じて)複数ページに分割する
・ほかの照会結果ページへのリンクを張る
TERASOLUNAフレームワークには、このような画面を簡単に作成できる「一覧表示機能」が用意されています。この一覧表示機能を使って、USERLISTテーブルを照会する「ユーザー一覧画面」を作ってみましょう。
一覧表示機能には、いくつかの実装方式がありますが、今回は以下のような実装にします。
- ページリンクをクリックすると、以下の情報をリクエストする
- 開始インデックス(全照会結果の何番目から取得するか)
- 1ページの表示件数(何レコード取得するか)
- 業務ロジックはリクエストされた情報でDBを検索して、照会結果を返す
図2 サンプルの実装概要
ブランクプロジェクトに追加・変更するファイルは、以下のとおりです。
図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" /> |
|
次ページでは、そのほかの必要なファイルを作成し、サンプルを動かしてみます。