目次へ

解答例 - 実習課題2 - 8.ボディ部を操作するカスタムタグ

(実習課題2)

実習課題1のタグハンドラクラスを、「BodyTagSupport」を使用するように変更しなさい。また以下の改良を行いなさい。

  • 属性「separator」を追加し、この属性で指定された文字をデータの区切りとする事。この属性が指定されなかった場合、これまで通りタブ文字(\t)をデータの区切りとする。

解答例

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

import java.io.BufferedReader;
import java.io.IOException;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.BodyTagSupport;

public class TableTag extends BodyTagSupport {

    private String separator = "\t";

    public int doAfterBody() throws JspException {
        try {
            BufferedReader reader = new BufferedReader(bodyContent.getReader());
            JspWriter writer = bodyContent.getEnclosingWriter();
            String str = null;
            writer.println("<table border=1>");
            while ((str = reader.readLine()) != null) {
                StringBuffer buffer = new StringBuffer("<tr>");
                int end = 0;
                while ((end = str.indexOf(separator)) != -1) {
                    buffer.append("<td>");
                    buffer.append(str.substring(0, end));
                    buffer.append("</td>");
                    str = str.substring(end + 1);
                    end = str.indexOf(separator);
                }
                buffer.append("<td>");
                buffer.append(str);
                buffer.append("</td>");
                buffer.append("</tr>");
                writer.println(buffer);
            }
            writer.println("</table>");
        } catch (IOException e) {
            throw new JspException(e.getMessage());
        }
        return super.doAfterBody();
    }

    public void setSeparator(String separator) {
        this.separator = separator;
    }
}
<!-- taglib.jsp -->
<!-- TECHSCORE Java JSP 8章 実習課題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>JSP8章 実習課題2</title></head>
  <body>
    <h3>JSP8章 実習課題2</h3>
    <b>tabで区切った場合</b>
    <myTag:TableTag8_2>作家名	代表作品
北杜夫	どくとるマンボウ航海記
遠藤周作	沈黙
ポール=オースター	幽霊たち
宮沢賢治	銀河鉄道の夜</myTag:TableTag8_2>
    <br>
    <b>"|"で区切った場合</b>
    <myTag:TableTag8_2 separator="|">作家名|代表作品
北杜夫|どくとるマンボウ航海記
遠藤周作|沈黙
ポール=オースター|幽霊たち
宮沢賢治|銀河鉄道の夜</myTag:TableTag8_2>

  </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>TableTag8_2</name>
    <tag-class>com.techscore.jsp.chapter8.exercise2.TableTag</tag-class>
    <body-content>JSP</body-content>
    <attribute>
      <name>separator</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
    </attribute>
  </tag>

</taglib>

↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp