目次へ

解答例 - 実習課題3 - 10.タグの検証/スクリプト変数の定義

(実習課題3)

実習課題2で作成したカスタムタグのTLDファイルにスクリプト変数の情報を追加しなさい。

解答例

/*
 * RequestTag.java TECHSCORE Java JSP10実習課題3
 * Copyright (c) 2004 Four-Dimensional Data, Inc.
 */
package com.techscore.jsp.chapter10.exercise3;

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 {
        //pageContext.setAttribute(this.id, "set1", PageContext.PAGE_SCOPE);
        
        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;
    }
}
<!-- taglib.jsp -->
<!-- TECHSCORE Java JSP 10章 実習課題3 -->
<!-- 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章 実習課題3</title></head>
  <body>
    <h3>JSP10章 実習課題3</h3>
    <% String[] strings = null; %>

    <b>text属性の場合</b><br>
    <myTag:request10_3 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><%
      }
      %>
    </myTag:request10_3>
    <br>
    <b>request属性の場合</b><br>
    <myTag:request10_3 id="set2" scope="session" request="array">
    <%
      strings = (String[])session.getAttribute("set2");
      for(int i = 0; i < strings.length; i++){
        %><%= strings[i] %><br><%
      }
      %>
    </myTag:request10_3>
    <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>request10_3</name>
    <tag-class>com.techscore.jsp.chapter10.exercise3.RequestTag</tag-class>
    <body-content>JSP</body-content>
    <variable>
      <name-from-attribute>id</name-from-attribute>
      <variable-class>java.lang.String[]</variable-class>
      <declare>true</declare>
      <scope>NESTED</scope>
    </variable>
    <attribute>
      <name>id</name>
      <required>true</required>
      <rtexprvalue>true</rtexprvalue>
    </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