解答例 - 実習課題3 - 6.カスタムタグの基本2
(実習課題3)
実習課題1のカスタムタグを改良しなさい。
- 現在時刻のフォーマットを指定する属性を追加しなさい。
- またその属性にスクリプトでjava.text.SimpleDateFormatのインスタンスが指定された場合には、それを使用して現在時刻を表示するようにしなさい。
- 文字列値が指定された場合には、その文字列のフォーマットに従って現在時刻を表示するようにしなさい。
解答例
/* * JspChapter6_3Tag.java TECHSCORE Java JSP6実習課題3 * Copyright (c) 2004 Four-Dimensional Data, Inc. */ package com.techscore.jsp.chapter6.exercise3; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; import javax.servlet.jsp.JspException; import javax.servlet.jsp.PageContext; import javax.servlet.jsp.tagext.Tag; public class JspChapter6_3Tag implements Tag { private PageContext pageContext = null; private Tag parentTag = null; private Object format = null; public void setFormat(Object format) { this.format = format; } public void setPageContext(PageContext pageContext) { this.pageContext = pageContext; } public void setParent(Tag parentTag) { this.parentTag = parentTag; } public int doStartTag() throws JspException { try { pageContext.getOut().print("ただいまの時刻は"); } catch (IOException e) { throw new JspException(e.getMessage()); } return EVAL_BODY_INCLUDE; } public int doEndTag() throws JspException { try { if (format instanceof SimpleDateFormat) { pageContext.getOut() .print(((SimpleDateFormat) format).format(new Date())); } else if (format instanceof String) { pageContext.getOut() .print(new SimpleDateFormat((String) format).format(new Date())); } } catch (IOException e) { throw new JspException(e.getMessage()); } return EVAL_PAGE; } public void release() {} public Tag getParent() { return parentTag; } }
<!-- taglib.jsp --> <!-- TECHSCORE Java JSP 6章 実習課題3 --> <!-- Copyright (c) 2004 Four-Dimensional Data, Inc. --> <%@page contentType="text/html; charset=Windows-31J" import="java.text.SimpleDateFormat" %> <%@taglib uri="http://www.techscore.com/tags/myTag" prefix="myTag" %> <html> <head><title>JSP6章 実習課題3</title></head> <body> <h3>JSP6章 実習課題3</h3> <p><b>String型で値を渡した場合</b></p> <myTag:showDate6_3 format="yyyy年MM月dd日hh時mm分ss秒">おおよそ</myTag:showDate6_3><br/> <p><b>SimpleDateFormatで値を渡した場合</b></p> <% SimpleDateFormat format = new SimpleDateFormat("yy-MM-dd"); %> <myTag:showDate6_3 format="<%= format %>"/><br/> </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>showDate6_3</name> <tag-class>com.techscore.jsp.chapter6.exercise3.JspChapter6_3Tag</tag-class> <body-content>JSP</body-content> <attribute> <name>format</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> </tag> </taglib>