目次へ

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

↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp