概要

  1. DBに格納されているコード系(0/1)をJSPで表示するときに文字列(No/Yes)に変換するタグです
  2. Screen Shot
    screen_shot.png
  3. JSP
    <%@ page contentType="text/html;charset=UTF-8" session="true"%>
    <%@ page import="java.util.*"%>
    <%@ taglib uri="/tags/struts-bean" prefix="bean"%>
    <%@ taglib uri="/tags/snail" prefix="snail"%>
    
    <% Map<String, String> order = new HashMap<String, String>();
       order.put("customer", "Taro");
       order.put("productNo", "105678-24");
       order.put("express order", "1");
       order.put("bundle other", "0");
       order.put("status", "2");
    
       request.setAttribute("order", order);
    %>
    
    <html>
    <head>
    <title>TAGLIB_EXAMPLE</title>
    </head>
    <body>
    <table border="1">
      <tr>
        <td>発注者</td>
        <td><bean:write name="order" property="customer" /></td>
      </tr>
      <tr>
        <td>商品ID</td>
        <td><bean:write name="order" property="productNo" /></td>
      </tr>
      <tr>
        <td>特急モード</td>
        <td><snail:code name="order" property="express order" type="OnOff" /></td>
      </tr>
      <tr>
        <td>同梱品</td>
        <td><snail:code name="order" property="bundle other" type="YesNo" /></td>
      </tr>
      <tr>
        <td>状態</td>
        <td><snail:code name="order" property="status" type="OrderStatus" /></td>
       </tr>
    </table>
    
    </body>
    </html>

関連するファイル

dir.png
  1. CodeTag?.java
    • タグライブラリのソースコードです
  2. Code.properties
    • コード系と対応する文字列が記録されたファイル。CodeTag?.javaが参照する。
  3. snail.tld
    • CodeTag?をJSPから使えるように外部仕様を定義する
  4. web.xml
    • snail.tldをJ2EEコンテナに登録する

タグライブラリのソースコード

  1. CodeTag?.java
    package com.snail.taglib;
    
    import java.util.ResourceBundle;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpSession;
    import javax.servlet.jsp.JspException;
    import javax.servlet.jsp.JspWriter;
    import javax.servlet.jsp.tagext.TagSupport;
    
    import org.apache.commons.beanutils.PropertyUtils;
    
    /**
     * コード系を文字列に変換するタグ.
     * <pre>
     * 0/1などのコードをYes/Noなどの文字列に変換するタグです。
     * ------------------------------------------------------------------------
     * 利用方法:
     *  <snail:code name=" " property=" " scope=" " type=" "/>
     *  name     : 必須 ${scope} に格納されているオブジェクト名。Mapも可。
     *  property : 任意 ${name} のフィールド変数名。省略時は name で指定した
     *             オブジェクトをコードと見なします。
     *  scope    : 任意 コードが格納されているスコープ。省略時はREQUEST,SESSION
     *             の順で${name}が有るかどうか調べます
     *  type     : 必須 コード系
     * ------------------------------------------------------------------------
     * コード系の定義:
     *  Code.properties に、"コード系.コード" の形で格納します
     * ------------------------------------------------------------------------
     * ライブラリ等:
     *  内部的にorg.apache.commons.beanutils.PropertyUtilsを使っています。
     * </pre>
     * 注意事項
     * @author kagyuu
     */
    @SuppressWarnings( { "serial", "unused" })//JDK1.5の警告を消すため
    public final class CodeTag
      extends TagSupport {
      /**
       * スコープ名とスコープを表す数字を格納するHashMap
       */
      private static final Map SCOPES = new HashMap();
    
      /**
       * スコープ名とスコープを表す数字を角のする
       */
      static {
        SCOPES.put("page", new Integer(PageContext.PAGE_SCOPE));
        SCOPES.put("request", new Integer(PageContext.REQUEST_SCOPE));
        SCOPES.put("session", new Integer(PageContext.SESSION_SCOPE));
        SCOPES.put(
          "application", new Integer(PageContext.APPLICATION_SCOPE));
      }
    
      /**
       * オブジェクト名
       */
      private String name = null;
    
      /**
       * プロパティ名
       */
      private String property = null;
    
      /**
       * スコープ指定
       */
      private String scope = null;
    
      /**
       * コード体系
       */
      private String type = null;
    
      /**
       * コンストラクタ
       */
      public CodeTag() {
        super();
      }
    
      /**
       * @param param オブジェクト名
       */
      public void setName(final String param) {
        this.name = param;
      }
    
      /**
       * @param param プロパティ名
       */
      public void setProperty(final String param) {
        this.property = param;
      }
    
      /**
       * @param param スコープ指定
       */
      public void setScope(final String param) {
        this.scope = param.toUpperCase();
      }
    
      /**
       * @param param コード体系
       */
      public void setType(final String param) {
        this.type = param;
      }
    
      /**
       * タグが閉じられるときに呼ばれるメソッドです
       *
       * @return 処理続行(EVAL_PAGE)
       * @throws JspException 何らかの理由でタグを解釈できなかった
       */
      public int doEndTag() throws JspException {
        try {
          JspWriter out = pageContext.getOut();
    
          Object target = null;
    
          if (scope == null) {
            target = pageContext.findAttribute(name);
    
            if (target == null) {
              throw new JspException(
                "Attribute " + name + " is not in any scopes.");
            }
          } else {
            target =
              pageContext.getAttribute(
                name,
                ((Integer) SCOPES.get(scope.toLowerCase())).intValue());
    
            if (target == null) {
              throw new JspException(
                "Attribute " + name + " is not in " + scope + " scopes.");
            }
          }
    
          if (property != null) {
            target = PropertyUtils.getProperty(target, property);
          }
    
          out.println(
            PropUtil.getProperty(type + "." + target.toString()));
        } catch (Exception e) {
          throw new JspException(e);
        }
    
        return EVAL_PAGE;
      }
    }
  2. Code.properties
    OnOff.0=OFF
    OnOff.1=ON
    YesNo.0=NO
    YesNo.1=YES
    OrderStatus.0=Order Accepted
    OrderStatus.1=Producting
    OrderStatus.2=Shipping
    OrderStatus.3=Delivered

snail.tldファイル

web.xmlへの追記

  ...
  <taglib>
    <taglib-uri>/tags/snail</taglib-uri>
    <taglib-location>/WEB-INF/snail.tld</taglib-location>
  </taglib>
</web-app>

Java#JavaEE


添付ファイル: filescreen_shot.png 748件 [詳細] filedir.png 826件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS   sitemap
Last-modified: 2006-02-18 (土) 03:00:52 (3946d)
ISBN10
ISBN13
9784061426061