Struts2 - タグ - 制御タグ
制御タグはプロセス制御、ValueStackの操作などを行う。
制御タグ種類
- if
- elseIf/elseif
- else
- append : 集合結合
- generator : 分割
- iterator : 集合巡り
- merge : 集合結合
- subset : 集合一部取得
- sort : ソート
if/elseif/else
<%@ page contentType="text/html; charset=UTF-8" language="java" errorPage=""%> <%@taglib prefix="s" uri="/struts-tags"%> <!DOCTYPE html> <html> <head> <title>s:ifタグ</title> </head> <body> <!-- Stack Context内にage=29を定義 --> <s:set name="age" value="29" /> <s:if test="#age>60"> 老人</s:if> <s:elseif test="#age>35"> 中年</s:elseif> <s:elseif test="#age>20"> 青年</s:elseif> <s:else>少年 </s:else> </body> </html>
<%@ page contentType="text/html; charset=UTF-8" language="java" errorPage=""%> <%@taglib prefix="s" uri="/struts-tags"%> <!DOCTYPE html> <html> <head> <title>s:itertorタグ</title> </head> <body> <table border="1"> <!-- List --> <s:iterator value="{'要素1','要素2','要素3','要素4','要素5'}" id="name" status="st"> <tr <s:if test="#st.odd"> style="background-color:#bbbbbb"</s:if>> <td><s:property value="name"/></td> </tr> </s:iterator> </table> <!-- Map --> <table border="1"> <tr> <th>key</th> <th>value</th> </tr> <s:iterator value="#{'key1':'value1', 'key2':'value2' , 'key3':'value3'}" id="score" status="st"> <tr <s:if test="#st.odd"> style="background-color:#bbbbbb"</s:if>> <td><s:property value="key"/></td> <td><s:property value="value"/></td> </tr> </s:iterator> </table> </body> </html>
append
<%@ page contentType="text/html; charset=UTF-8" language="java" errorPage=""%> <%@taglib prefix="s" uri="/struts-tags"%> <!DOCTYPE html> <html> <head> <title>s:appendタグ</title> </head> <body> <!-- Stack Context内にnewListを定義 --> <!-- appendタグで二つを結合する --> <s:append var="newList"> <s:param value="{'要素1','要素2','要素3'}" /> <s:param value="{'要素4','要素5'}" /> </s:append> <table border="1"> <s:iterator value="#newList" status="st" id="ele"> <tr> <td><s:property value="#st.count"/></td> <td><s:property value="ele"/></td> </tr> </s:iterator> </table> </body> </html>
generator
<%@ page contentType="text/html; charset=UTF-8" language="java" errorPage=""%> <%@taglib prefix="s" uri="/struts-tags"%> <!DOCTYPE html> <html> <head> <title>s:generatorタグ</title> </head> <body> <!--「,」で分割 --> <!-- count=2の場合、最大2個まで --> <!-- var指定でStackContextに保存 (requestスコープにも保存)--> <s:generator val="'要素1,要素2,要素3,要素4'" separator="," var="books" count="2"/> <table border="1"> <s:iterator value="#books"> <tr> <td><s:property/></td> </tr> </s:iterator> </table> ${requestScope.books} </body> </html>
merge
mergeはappendと同じく集合を結合するが、結合する方法が異なる。
集合1 : [要素1-1, 要素1-2] 集合2 : [要素2-1, 要素2-2]
append : [要素1-1,要素1-2,要素2-1,要素2-2] merge : [要素1-1,要素2-1,要素1-2,要素2-2]
subset
<%@ page contentType="text/html; charset=UTF-8" language="java" errorPage=""%> <%@taglib prefix="s" uri="/struts-tags"%> <!DOCTYPE html> <html> <head> <title>s:subsetタグ</title> </head> <body> <table border="1"> <s:subset source="{'要素1','要素2','要素3','要素4','要素5'}" start="1" count="4"> <s:iterator status="st"> <tr <s:if test="#st.odd"> style="background-color:#bbbbbb"</s:if>> <td><s:property/></td> </tr> </s:iterator> </s:subset> </table> </body> </html>
sort
package util; import java.util.Comparator; public class MyComparator implements Comparator<String> { @Override public int compare(String o1, String o2) { return o2.length() - o1.length(); } }
<%@ page contentType="text/html; charset=UTF-8" language="java" errorPage=""%> <%@taglib prefix="s" uri="/struts-tags"%> <!DOCTYPE html> <html> <head> <title>s:sortタグ</title> </head> <body> <!-- Comparatorのインスタンス --> <s:bean var="mycomparator" name="util.MyComparator"/> 長い降順に並び替え : <s:sort source="{'12345','123','1234','123456789'}" comparator="#mycomparator" var="sortedList"/> <table border="1" > <s:iterator status="st" value="#attr.sortedList"> <tr <s:if test="#st.odd"> style="background-color:#bbbbbb"</s:if>> <td><s:property/></td> </tr> </s:iterator> </table> </body> </html>