2.6 参照画面の作成
2.6.3 ヘルパー Bean から情報を受け取る
Page
45.Page
46 Copyright 2005 株式会社NTTデータ イントラマート All rights Reserved.Source 2-6
<C:/imart/doc/imart/notice/notice_view.jsp>
<%@ page contentType="text/html; charset=Windows-31J" pageEncoding="Windows-31J" %>
<%@ taglib prefix="imartj2ee" uri="http://www.intra-mart.co.jp/taglib/core/framework" %>
<%@ taglib prefix="imarttag" uri="http://www.intra-mart.co.jp/taglib/core/standard" %>
<%@ page import="java.util.*" %>
<imartj2ee:HelperBean id="notice_data" class="notice.view.bean.NoticeViewBean"/>
<%
// 掲示情報の取り出し
List notices = notice_data.getNotices();
%>
<HTML>
<HEAD>
<TITLE>個人掲示板参照画面</TITLE>
</HEAD>
<BODY>
<!-- タイトル-->
<TABLE bgcolor='#99cc66' width='100%'>
<TR><TD>
<FONT color='white' size="+1"><b> 個人掲示板 -参照- </b></FONT>
</TD></TR>
</TABLE>
<BR>
<BR>
<CENTER>
<FORM>
<imarttag:repeat list="<%= notices%>" item="record">
<TABLE border="1" width="80%">
<TR>
<TH bgcolor="#99cc66">
タイトル </TH>
<TD align="left" colspan="3">
Page
47. <%= ((Map)record).get("title") %></TD>
</TR>
<TR>
<TH bgcolor="#99cc66">
作成者 </TH>
<TD>
<%= ((Map)record).get("author") %>
</TD>
<TH bgcolor="#99cc66">
日付 </TH>
<TD>
<imarttag:imartDateFormat value="<%=((Date)((Map)record).get("date"))%>"
format="yyyy 年 MM 月 dd 日 kk 時 mm 分 ss 秒"></imarttag:imartDateFormat>
</TD>
</TR>
<TR>
<TH bgcolor="#99cc66">
内容 </TH>
<TD align="left" colspan="3">
<%= ((Map)record).get("content") %>
</TD>
</TR>
</TABLE>
<BR>
</imarttag:repeat>
</CENTER>
</FORM>
</BODY>
</HTML>
Page
48 Copyright 2005 株式会社NTTデータ イントラマート All rights Reserved.これが、参照画面の JSP ファイルのソースです。例によって前のソースから変更のあった部分は網掛けにしていま す。
<%@ taglib prefix="imartj2ee" uri="http://www.intra-mart.co.jp/taglib/core/framework" %>
<%@ taglib prefix="imarttag" uri="http://www.intra-mart.co.jp/taglib/core/standard" %>
この 2 つの行は、イントラマートが持つ 2 つのタグライブラリの使用を宣言しています。まず、登録画面でも使った J2EE フレームワークのタグライブラリ(uri が” http://www.intra-mart.co.jp/taglib/core/framework”になっている行 です)、あとはイントラマート標準のタグライブラリ(uri が” http://www.intra-mart.co.jp/taglib/core/standard”にな っている部分)です。
次の、
<%@ page import="java.util.*" %>
これは、後のほうでVectorクラスとMapクラスを使用するので、そのためのimport宣言です。
<imartj2ee:HelperBean id="notice_data" class="notice.view.bean.NoticeViewBean"/>
これは、J2EE フレームワークのタグライブラリに含まれる、HelperBean タグです。このタグが呼び込まれたときに、
図2-3で説明したように、[コンストラクタ]-[request,response情報のセット]-[init()メソッドの実行]という処理が行われ ます。この時点で、id属性で指定している”notice_data”という名前でNoticeViewBeanクラスのインスタンス変数が 使用できるようになることに注意してください。
さらに、
<%
// 掲示情報の取り出し
List notices = notice_data.getNotices();
%>
という記述で、先ほどのNoticeViewBeanクラスのinit()メソッドでセットした掲示情報を取り出しています。
JSPプログラムの中で<%~%>で囲まれた部分をスクリプトレットといい、ここにJavaのコードを埋め込むことができ ます。
あとは、ここまでの処理でnoticesというVector型の変数に取り込まれた掲示情報をHTMLの画面上に表示する ための記述をしていきます。
<imarttag:repeat list="<%= notices%>" item="record">
~
</imarttag:repeat>
ここでは、intra-martが標準で提供するタグライブラリ、repeatを使用しています。このタグは、与えられた変数(List 型)をその要素数ぶんだけ繰り返し処理しながらその変数の中に入っているデータを表示するときに使います。
intra-martスクリプト開発モデルの開発経験がある方には、imartタグのrepeatタグといったほうがわかりやすいかも
しれません。
Page
49.変数の notices の中には掲示情報(タイトル・作成者・作成日付・内容を含みます)が入っていますので、これを
repeatタグで繰り返しならが中身を取り出していこうというわけです。
実際に取り出している部分は、
<%= ((Map)record).get("title") %>
<%= ((Map)record).get("author") %>
<imarttag:imartDateFormat value="<%=((Date)((Map)record).get("date"))%>"
format="yyyy年MM月dd日kk時mm分ss秒"></imarttag:imartDateFormat>
<%= ((Map)record).get("content") %>
の 4 行です。上から順番に、タイトル、作成者、作成日、内容を取り出しています。登録画面を作成したときに、
HashMapのkeyに設定した文字列を思い出してください。それぞれ、title、author、date、contentでしたね。
日付の情報を取得する際に、intra-martのタグライブラリ imartDateFormat
を利用しています。
imartDateFormatは、日付データを指定フォーマット文字列に変換して表示する際に用いるタグライブラリです。
今回はformat属性に指定した
"yyyy年MM月dd日kk時mm分ss秒"
という文字列に変換して表示しています。
変換を行わずに
<%= ((Map)record).get("date") %>
と記述すると
Thu Feb 06 15:30:33 JST 2003
このように表示されてしまい、ユーザには少しわかりづらい表現となってしまいます。
これで掲示情報をJSPプログラムのコーディングは終了です。
今度はブラウザのほうで実際に掲示板が動くかを確かめてみましょう。
Page
50 Copyright 2005 株式会社NTTデータ イントラマート All rights Reserved.【登録画面】
図
2.6-d
【参照画面】
図
2.6-e
どうでしょうか?正常に動きましたか?
もし動かなかったときは、ソースと見比べながら、どこが間違っていたのか確認してみましょう。