目次へ

解答例 - 実習課題2 - 7.繰り返し機能を持つカスタムタグ

(実習課題2)

7.1のサンプルカスタムタグ「ListTag」を以下の点で改良し、それを使用したJSPページを作成しなさい。

  • 「list」属性で指定されたオブジェクトが「java.util.List」ではなく、「java.util.Map」であった場合、その値を順に「pageContext」に登録するようにする事。

解答例

/*
 * ListTag.java TECHSCORE Java JSP7実習課題2
 * Copyright (c) 2004 Four-Dimensional Data, Inc.
 */
package com.techscore.jsp.chapter7.exercise2;

import java.util.Iterator;
import java.util.List;
import java.util.Map;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.PageContext;
import javax.servlet.jsp.tagext.IterationTag;
import javax.servlet.jsp.tagext.Tag;

public class ListTag implements IterationTag {

    private PageContext pageContext = null;
    private Tag parent = null;
    private Map map = null;
    private Iterator iterator = null;
    private String item = "";

    public void setList(String name) {
        Object object = pageContext.findAttribute(name);

        if (object instanceof List) {
            List list = (List) object;
            this.iterator = list.iterator();
        } else if (object instanceof Map) {
            map = (Map) object;
            this.iterator = map.values().iterator();
        }
    }

    public void setPageContext(PageContext pageContext) {
        this.pageContext = pageContext;
    }

    public int doStartTag() throws JspException {
        if (iterator.hasNext()) {
            pageContext.setAttribute(item, iterator.next());
            return (EVAL_BODY_INCLUDE);
        } else {
            return (SKIP_BODY);
        }
    }

    public int doAfterBody() throws JspException {
        if (iterator.hasNext()) {
            pageContext.setAttribute(item, iterator.next());
            return (EVAL_BODY_AGAIN);
        } else {
            return (SKIP_BODY);
        }
    }

    public int doEndTag() throws JspException {
        return (EVAL_PAGE);
    }

    public void release() {

    }

    public void setItem(String item) {
        this.item = item;
    }

    public Tag getParent() {
        return parent;
    }

    public void setParent(Tag parent) {
        this.parent = parent;
    }
}
<!-- taglib.jsp -->
<!-- TECHSCORE Java JSP 7章 実習課題2 -->
<!-- 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章 実習課題2</title></head>
  <body>
    <h3>JSP7章 実習課題2</h3>
    <%
      Map map = new HashMap();
      map.put("key1", "test1");
      map.put("key2", "test2");
      map.put("key3", "test3");
      application.setAttribute("list", map);
      %>
    <table border="1"><tr>
      <myTag:listTag7_2 list="list" item="item">
        <td><%= pageContext.getAttribute("item") %></td>
      </myTag:listTag7_2>
    </tr></table>
    
  </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>listTag7_2</name>
    <tag-class>com.techscore.jsp.chapter7.exercise2.ListTag</tag-class>
    <body-content>JSP</body-content>
    <attribute>
      <name>list</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
    </attribute>
    <attribute>
      <name>item</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
    </attribute>
  </tag>

</taglib>

↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp