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