解答例 - 実習課題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>