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

