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

