s:subsetの使い方
Struts2のTagの s:subset はリストの一部分を取り出す時に利用する。
s:incldueと組み合わせて利用すると条件によって2段組または1段組にしたい場合などで便利に使える。
リスト要素を単純に出力するとして、
s:include で取り込まれる側には純粋な1段分の出力のみを行うように次のように記述し部品化する
output_one.jsp
<%@page contentType="text/html; charset=UTF-8" %> <%@ taglib prefix="s" uri="/struts-tags" %> <ul> <s:iterator value="top"> <li> <s:property value="%{top}"/> </li> </s:iterator> </ul>
そして、
layout_column はレイアウトを制御する変数で、list が出力する要素リストとした場合
メインのJSPで次のようにする
<%@page contentType="text/html; charset=UTF-8" %> <%@ taglib prefix="s" uri="/struts-tags" %> <s;if test="layout_column == '1'"> <%-- 1段組み --%> <s:push value="list"> <s:include value="output_one.jsp"/> </s:push> </s:if> <s:else> <%-- 2段組み --%> <table><tr> <td> <s:subset source="list" start="0" count="(list.size()+1)/2"> <s:include value="output_one.jsp"/> </s:subset> </td><td> <s:subset source="list" start="(list.size()+1)/2"> <s:include value="output_one.jsp"/> </s:subset> </td> </tr></table> </s:else>
この例ぐらいの出力ならコピペしても問題ない内容だが、複雑な出力をする場合に出力コードが再利用できる。