エンタープライズ:特集 | 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]