解答例 - 実習課題3 - 7.繰り返し機能を持つカスタムタグ
(実習課題3)
以下のサンプルカスタムタグを実装し、それを使用したJSPページを作成しなさい。
- 「array」属性にはスクリプトでオブジェクトの配列を指定する。
- 指定されたオブジェクトの配列を、順にリスト表示する。
解答例
/* * ArrayTag.java TECHSCORE Java JSP7実習課題3 * Copyright (c) 2004 Four-Dimensional Data, Inc. */ package com.techscore.jsp.chapter7.exercise3; import java.io.IOException; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import javax.servlet.jsp.JspException; import javax.servlet.jsp.JspWriter; import javax.servlet.jsp.PageContext; import javax.servlet.jsp.tagext.IterationTag; import javax.servlet.jsp.tagext.Tag; public class ArrayTag implements IterationTag { private PageContext pageContext = null; private Tag parent = null; private Iterator iterator = null; public void setArray(Object[] objects) { List list = new LinkedList(); for (int i = 0; i < objects.length; i++) { list.add(objects[i]); } iterator = list.iterator(); } public void setPageContext(PageContext pageContext) { this.pageContext = pageContext; } public int doStartTag() throws JspException { return (EVAL_BODY_INCLUDE); } public int doAfterBody() throws JspException { JspWriter writer = pageContext.getOut(); if (iterator.hasNext()) { try { writer.println(iterator.next() + "<br>"); } catch (IOException e) { e.printStackTrace(); } return (EVAL_BODY_AGAIN); } else { return (SKIP_BODY); } } public int doEndTag() throws JspException { return (EVAL_PAGE); } public void release() { } public Tag getParent() { return parent; } public void setParent(Tag parent) { this.parent = parent; } }
<!-- taglib.jsp --> <!-- TECHSCORE Java JSP 7章 実習課題3 --> <!-- Copyright (c) 2004 Four-Dimensional Data, Inc. --> <%@page contentType="text/html; charset=Windows-31J" import="java.util.*" %> <%@taglib uri="http://www.techscore.com/tags/myTag" prefix="myTag" %> <html> <head><title>JSP7章 実習課題3</title></head> <body> <h3>JSP7章 実習課題3</h3> <% String[] str = new String[5]; str[0] = "test1"; str[1] = "test2"; str[2] = "test3"; str[3] = "test4"; str[4] = "test5"; %> <myTag:arrayTag array="<%= str %>"> </myTag:arrayTag> </body> </html>
<?xml version="1.0" ?> <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd"> <taglib> <tlib-version>1.0</tlib-version> <jsp-version>1.2</jsp-version> <short-name>example tags</short-name> <tag> <name>arrayTag</name> <tag-class>com.techscore.jsp.chapter7.exercise3.ArrayTag</tag-class> <body-content>JSP</body-content> <attribute> <name>array</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> </tag> </taglib>