解答例 - 実習課題1 - 10.タグの検証/スクリプト変数の定義
(実習課題1)
次のカスタムタグおよびそれを検証するTagExtraInfoクラスを作成しなさい。またカスタムタグを利用したページを作成しなさい。
- HTTPリクエストまたは属性に指定された値から文字配列を作成し、指定の名前で指定のスコープに登録するカスタムタグ。
- request属性が指定された場合は、その属性値でHTTPリクエストから値を文字配列として取り出す。
- text属性が指定された場合は、その属性値を「,」(カンマ)で区切って文字配列を作成する。
- できた文字配列を、id属性で指定された名前で、scope属性で指定されたスコープに登録する事。
- またrequest属性かtext属性が必ず指定されるよう検証する事。またtext属性が指定された場合は、値に「,」(カンマ)が含まれているかどうか検証する事。ただし値がスクリプトで指定された場合はその限りではない。
解答例
/* * RequestTag.java TECHSCORE Java JSP10実習課題1 * Copyright (c) 2004 Four-Dimensional Data, Inc. */ package com.techscore.jsp.chapter10.exercise1; import java.util.ArrayList; import java.util.StringTokenizer; import javax.servlet.jsp.JspException; import javax.servlet.jsp.PageContext; import javax.servlet.jsp.tagext.TagSupport; public class RequestTag extends TagSupport { private String request = null; private String text = null; private String scope = null; public int doStartTag() throws JspException { String[] strings = null; if (request != null) { strings = pageContext.getRequest().getParameterValues(request); } else if (text != null) { strings = divideString(text); } if ("session".equals(scope)) { pageContext.setAttribute(id, strings, PageContext.SESSION_SCOPE); } else if ("request".equals(scope)) { pageContext.setAttribute(id, strings, PageContext.REQUEST_SCOPE); } else if ("application".equals(scope)) { pageContext.setAttribute(id, strings, PageContext.APPLICATION_SCOPE); } else if ("page".equals(scope)) { pageContext.setAttribute(id, strings, PageContext.PAGE_SCOPE); } return EVAL_PAGE; } private String[] divideString(String text) { StringTokenizer tokenizer = new StringTokenizer(text, ","); ArrayList arrayList = new ArrayList(); while (tokenizer.hasMoreTokens()) { arrayList.add(tokenizer.nextToken()); } String[] strings = new String[0]; strings = (String[]) arrayList.toArray(strings); return strings; } private String[] objectsToStrings(Object[] objects) { int len = objects.length; String[] strings = new String[len]; for (int i = 0; i < len; i++) { strings[i] = objects[i].toString(); } return strings; } public void setRequest(String request) { this.request = request; } public void setText(String text) { this.text = text; } public void setScope(String scope) { this.scope = scope; } }
/* * RequestTagExtraInfo.java TECHSCORE Java JSP10実習課題1 * Copyright (c) 2004 Four-Dimensional Data, Inc. */ package com.techscore.jsp.chapter10.exercise1; import javax.servlet.jsp.tagext.TagData; import javax.servlet.jsp.tagext.TagExtraInfo; public class RequestTagExtraInfo extends TagExtraInfo { private boolean textCheck(String text) { if (text.indexOf(",") == -1) { return false; } return true; } public boolean isValid(TagData tagData) { if (TagData.REQUEST_TIME_VALUE == tagData.getAttribute("text") || TagData.REQUEST_TIME_VALUE == tagData.getAttribute("request")) { return false; } String text = tagData.getAttributeString("text"); String request = tagData.getAttributeString("request"); if (text != null && !"".equals(text)) { if (request != null && !"".equals(request)) { return false; } else if (!textCheck(text)) { return false; } } else { if (request == null || "".equals(request)) { return false; } } return true; } }
<!-- taglib.jsp --> <!-- TECHSCORE Java JSP 10章 実習課題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>JSP10章 実習課題1</title></head> <body> <h3>JSP10章 実習課題1</h3> <% String[] strings = null; %> <b>text属性の場合</b><br> <myTag:request id="set1" scope="request" text="0,1,2,3,4,5,6,7,8,9"/> <% strings = (String[])request.getAttribute("set1"); for(int i = 0; i < strings.length; i++){ %><%= strings[i] %><br><% } %> <br> <b>request属性の場合</b><br> <myTag:request id="set2" scope="session" request="array"/> <% strings = (String[])session.getAttribute("set2"); for(int i = 0; i < strings.length; i++){ %><%= strings[i] %><br><% } %> <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>request</name> <tag-class>com.techscore.jsp.chapter10.exercise1.RequestTag</tag-class> <tei-class>com.techscore.jsp.chapter10.exercise1.RequestTagExtraInfo</tei-class> <body-content>JSP</body-content> <attribute> <name>id</name> <required>true</required> </attribute> <attribute> <name>scope</name> <required>true</required> </attribute> <attribute> <name>request</name> <required>false</required> </attribute> <attribute> <name>text</name> <required>false</required> </attribute> </tag> </taglib>