※ 本章は「データ一覧表示の最適化」シリーズとなります
🔍 本記事の目的
Struts2における「一覧表示」の実装は、あらゆる業務画面に登場します。
本記事では、実務で役立つ一覧出力パターンを整理し、UIの見やすさ・実装効率・保守性を高めるテクニックを紹介します。
✅ 対象読者
- Struts2での一覧出力に悩んでいる方
-
<s:iterator>
や<s:property>
を使いこなしたい方 - 表構造の整理や出力条件の切り分けに課題を感じている方
📌 内容一覧
セクション | 内容 |
---|---|
1. <s:iterator> の基本構文と使用例 |
単純な繰り返し表示 |
2. <s:iterator> 内での条件分岐・入れ子表現 |
条件付き出力、ネスト構造対応 |
3. 空リスト時のメッセージ表示 | 件数0のときだけ別UI表示する方法 |
4. 行番号の付与方法(indexの活用) | 「1, 2, 3,...」の連番表示 |
5. escape="false" によるHTML出力制御 | HTML出力を許可する際の注意点 |
1. <s:iterator>
の基本構文と使用例
<table>
<tr><th>ID</th><th>名前</th><th>登録日</th></tr>
<s:iterator value="userList">
<tr>
<td><s:property value="id"/></td>
<td><s:property value="name"/></td>
<td><s:date name="createdAt" format="yyyy/MM/dd"/></td>
</tr>
</s:iterator>
</table>
2. 内での条件分岐・入れ子表現
<s:iterator value="users">
<tr>
<td><s:property value="id" /></td>
<td>
<s:if test="role == 'admin'">★管理者★</s:if>
<s:else><s:property value="name" /></s:else>
</td>
</tr>
</s:iterator>
3. 空リスト時のメッセージ表示
<s:if test="userList.size() == 0">
<p>データが存在しません。</p>
</s:if>
<s:else>
<table>...(略)</table>
</s:else>
4. 行番号の付与方法
<s:iterator value="users" status="rowStatus">
<tr>
<td><s:property value="#rowStatus.index + 1" /></td> <!-- 1始まり -->
<td><s:property value="name" /></td>
</tr>
</s:iterator>
5. HTML文字列の出力とescape属性
<!-- デフォルトではHTMLエスケープされる -->
<s:property value="comment" /> <!-- <b>強調</b> → <b>強調</b> -->
<!-- エスケープを無効化(HTMLタグをそのまま表示) -->
<s:property value="comment" escape="false" />
⚠️ escape="false" を使う場合はXSS対策(サニタイズ)を必ず行いましょう!
🧩 実務向けTips
-
で複数の一覧表示を1画面にまとめる場合は、
include
や入れ子
を活用 -
表のヘッダー・データを
<thead>
,<tbody
> に分離し、構造とスタイルの分離を意識 -
行クリックでの遷移は
<tr onclick="...">
で実装すると自然な操作感に
💬 次回予告
次回【Vol.8.17】では、Struts2独自のカスタムUIタグの作成方法を解説します!
業務にフィットした独自タグを作って、UIロジックの共通化を図りましょう!