目次へ

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

(実習課題1)

以下のカスタムタグを作成し、それを使用したJSPページを作成しなさい。

  • ボディ部にはタブ区切り(\t)で文字列データが記載される。そのデータをテーブルに変換してJSPページに出力するカスタムタグ。
  • タブで区切られた1つのデータが、そのままテーブルの1カラムになる事。
  • 1行がそのままテーブルの1行になる事。

解答例

/*
 * TableTag.java TECHSCORE Java JSP8実習課題1
 * Copyright (c) 2004 Four-Dimensional Data, Inc.
 */

package com.techscore.jsp.chapter8.exercise1;

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

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.PageContext;
import javax.servlet.jsp.tagext.BodyContent;
import javax.servlet.jsp.tagext.BodyTag;
import javax.servlet.jsp.tagext.Tag;

public class TableTag implements BodyTag {

    private Tag parentTag = null;
    private PageContext pageContext = null;
    private BodyContent bodyContent = null;

    public void setBodyContent(BodyContent bodyContent) {
        this.bodyContent = bodyContent;
    }

    public void doInitBody() throws JspException {}

    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("\t")) != -1) {
                    buffer.append("<td>");
                    buffer.append(str.substring(0, end));
                    buffer.append("</td>");
                    str = str.substring(end + 1);
                    end = str.indexOf("\t");
                }
                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 SKIP_BODY;
    }

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

    public void setParent(Tag tag) {
        this.parentTag = tag;
    }

    public Tag getParent() {
        return parentTag;
    }

    public int doStartTag() throws JspException {
        return EVAL_BODY_BUFFERED;
    }

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

    public void release() {}

}
<!-- taglib.jsp -->
<!-- TECHSCORE Java JSP 8章 実習課題1 -->
<!-- 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章 実習課題1</title></head>
  <body>
    <h3>JSP8章 実習課題1</h3>

    <myTag:TableTag8_1>作家名	代表作品
北杜夫	どくとるマンボウ航海記
遠藤周作	沈黙
ポール=オースター	幽霊たち
宮沢賢治	銀河鉄道の夜</myTag:TableTag8_1>
  </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_1</name>
    <tag-class>com.techscore.jsp.chapter8.exercise1.TableTag</tag-class>
    <body-content>JSP</body-content>
  </tag>

</taglib>

↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp