エンタープライズ:特集 2003/11/28 15:30:00 更新


特集:第2回 実用サンプルコードで理解する「Struts」の基礎 (12/15)

結果を出力するJSPページ−KeijiReadSuccess.jsp

 結果を返すJSPページとなるKeijiReadSuccess.jspファイルは、List 13の通りだ。

List 13■KeijiReadSuccess.jspファイル
1: <%@ page contentType="text/html; charset=EUC_JP" %>
2: <%@ taglib uri="/tags/struts-bean" prefix="bean" %>
3: <%@ taglib uri="/tags/struts-html" prefix="html" %>
4: <%@ taglib uri="/tags/struts-logic" prefix="logic" %>
5:
6: <html>
7: <body>
8: <div align="center">
9: <h1>投稿一覧</h1>
10: <logic:messagesPresent>
11: <html:errors/>
12: </logic:messagesPresent>
13:
14: <logic:messagesNotPresent>
15: <logic:iterate id="onedata" name="dbdatas">
15: <table border="1" width="80%">
16: <tr>
17: <th>投稿者</th><td><bean:write name="onedata" property="username"/></td>
18: </tr>
19: <tr>
20: <th>メールアドレス</th><td><bean:write name="onedata" property="email"/></td>
21: </tr>
22: <tr>
23: <th>投稿日</th><td><bean:write name="onedata" property="writedate"/></td>
24: </tr>
25: <tr>
26: <th>投稿元アドレス</th><td><bean:write name="onedata" property="host"/></td>
27: </tr>
28: <tr>
29: <th>タイトル</th><td><bean:write name="onedata" property="title"/></td>
30: </tr>
31: <tr>
32: <th>本文</th><td><bean:write name="onedata" property="msg"/></td>
33: </tr>
34: </table>
35: </logic:iterate>
36: </logic:messagesNotPresent>
37:
38: </div>
39: <br>
40: <a href="index.jsp">トップに戻る</a>
41: </body>
42: </html>

 すでにList 12の処理で、データベース上の情報を含むArrayListオブジェクトを渡しているため、JSPページでは渡されたArrayListオブジェクトを展開し、どのように表示するかという点がポイントとなる。

 Strutsでは、ArrayListオブジェクトなど、コレクション要素を展開して出力するには、次のようにLogicタグライブラリのiterateを用いる。

15: <logic:iterate id="onedata" name="dbdatas">
〜略〜
35: </logic:iterate>

 iterateでは、name属性に展開したい要素が含まれているコレクション名を渡す。ここではdbdatasを渡しているため、List 11の92行目で設定したArrayListオブジェクトが得られる。

 また、id属性にはループ展開される際、そのそれぞれの要素にアクセスするための名前を指定する。ここでは仮にonedataという名称にしているが、どのような名前でもよい。

 この例のようにonedataと指定した場合、<logic:iterate>と</logic:iterate>で囲まれた個所では、onedataという名称で展開された要素にアクセスできる。たとえば、17行目を見てみよう。

17: <th>投稿者</th><td><bean:write name="onedata" property="username"/></td>

 ここでは、Beanタグライブラリのwrite要素を使い、onedataという名前のusernameプロパティの値を指定している。ここでonedataは、先に指定したdbdatasという名前のArrayListオブジェクトが展開された個々の要素だ。

 またList 11では、ArrayListオブジェクトの要素として、List 12に示したKeijiDataオブジェクトを格納している。そのため、ここでのonedataは、KeijiDataオブジェクトを指すのだ。そしてusernameプロパティを指定していることから、結果としてKeijiDataオブジェクトのgetUsernameメソッドが呼び出され、その結果が埋め込まれる。

 <logic:iterate>と</logic:iterate>は、name属性で指定したコレクションが空になるまでループ展開して出力される。そのため、16〜34行目の処理は、ArrayListオブジェクトの数だけ――List 11で読み込んだデータベースのレコードの数だけ――展開されて表示され、結果は、冒頭に示したFig.4のようになるわけだ。

前のページ | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 次のページ

[大澤文孝,ITmedia]