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

