tomcat7 + struts2でwebアプリケーション(4) iterator
リスト構造のデータをまわして取得する。
ついでにifタグも使ってみる。
(1)リストに挿入するInputModelオブジェクトにメンバ追加
import java.io.Serializable; public class InputModel implements Serializable{ private String username; private String password; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
(2)アクションのメンバにリストを追加。
ついでにexecuteメソッドでインスタンスを追加。
import java.util.ArrayList; import com.opensymphony.xwork2.ActionSupport; import com.opensymphony.xwork2.ModelDriven; public class TestAction extends ActionSupport implements ModelDriven<InputModel> { private InputModel model = new InputModel(); private ArrayList<InputModel> list = new ArrayList<>(); @Override public String execute() throws Exception { InputModel listData = new InputModel(); listData.setUsername("satou"); listData.setPassword("hello"); list.add(listData); listData = new InputModel(); listData.setUsername("tanaka"); listData.setPassword("bye"); list.add(listData); return "success"; } @Override public InputModel getModel() { return model; } public ArrayList<InputModel> getList() { return list; } public void setList(ArrayList<InputModel> list) { this.list = list; } }
(3)結果ページにテーブルを追加(result.jsp)
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="s" uri="/struts-tags" %> <%@ page import="java.util.ArrayList" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>result</title> </head> <body> <s:property value="username"/> <table border="1"> <tr><th>name</th><th>pass</th></tr> <%-- リスト要素のオブジェクトのメンバを指定 --%> <s:iterator value="list"> <tr><td><s:property value="username"/></td><td><s:property value="password"/></td></tr> </s:iterator> </table> <%-- 単にリストの中身を表示する --%> <s:iterator value="list"> <s:property /> </s:iterator> </body> </html>
リファレンスを見ると、リストの開始位置や終了位置の指定や、タグ内での配列の生成などもできるみたい。
(4)奇数のときは背景色を変更(result.jsp)
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="s" uri="/struts-tags" %> <%@ page import="java.util.ArrayList" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>result</title> </head> <body> <s:property value="username"/> <table border="1"> <tr><th>name</th><th>pass</th></tr> <%-- リスト要素のオブジェクトのメンバを指定 --%> <s:iterator value="list" status="status"> <tr <s:if test="#status.odd">style="background:grey"</s:if>><td><s:property value="username"/></td><td><s:property value="password"/></td></tr> </s:iterator> </table> <%-- 単にリストの中身を表示する --%> <s:iterator value="list"> <s:property /> </s:iterator> </body> </html>
(5)要素数をカウントしながら表示する(result.jsp)
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="s" uri="/struts-tags" %> <%@ page import="java.util.ArrayList" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>result</title> </head> <body> <s:property value="username"/> <table border="1"> <tr> <th>id</th> <th>name</th> <th>pass</th> </tr> <%-- リスト要素のオブジェクトのメンバを指定 --%> <s:iterator value="list" status="status"> <tr <s:if test="#status.odd">style="background:grey"</s:if>> <td><s:property value="#status.count"/></td> <td><s:property value="username"/></td> <td><s:property value="password"/></td> </tr> </s:iterator> </table> <%-- 単にリストの中身を表示する --%> <s:iterator value="list"> <s:property /> </s:iterator> </body> </html>