liguofeng29’s blog

個人勉強用ブログだっす。

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>

f:id:liguofeng29:20160321220302p:plain

iterator

<%@ 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>

f:id:liguofeng29:20160321221833p:plain

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>

f:id:liguofeng29:20160321220731p:plain

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>

f:id:liguofeng29:20160321222433p:plain

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>

f:id:liguofeng29:20160321223136p:plain

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>

f:id:liguofeng29:20160321224113p:plain