ASH | サーバ | セキュリティ | Linux | FreeBSD | DB | Web | CGI | Perl | Java | XML | プログラム | ネットワーク | 標準 | Tips集

条件指定カスタムタグ

ifカスタムタグ

ifカスタムタグの仕様

 ifカスタムタグでは、test属性で指定した条件が真の場合に、BODYの内容を出力します。

<ash:if test="条件式">
  条件が真の場合のJSPの記述
</ash:if>

タグハンドラのソース(IfTag.java)

 タグハンドラは、doStartTagメソッドのみ実装します。 タグハンドラの処理では、条件を判断し、EVAL_BODY_INCLUDE、または、SKIP_BODYを返却します。

IfTag.java
// Copyright (C)1995-2002 ASH multimedia lab. http://ash.jp/
package jp.ash.taglib;

import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;

/**
 * if条件タグライブラリ
**/
public class IfTag extends TagSupport {
  /** if条件 **/
  private boolean test;

  /** if条件(test)の設定 **/
  public void setTest(boolean test) {
    this.test = test;
  }

  /** タグ初期処理 **/
  public int doStartTag() throws JspException {
    // if条件判定
    if (test) {
      return EVAL_BODY_INCLUDE;
    } else {
      return SKIP_BODY;
    }
  }
}

choose/whenカスタムタグ

choose/whenカスタムタグの仕様

 choose/whenカスタムタグでは、多分岐条件をサポートします。 whenタグのtest属性で指定した条件が真の場合に、そのBODYの内容を出力します。

<ash:choose>
  <ash:when test="条件式">
    条件が真の場合のJSPの記述
  </ash:when>
  .....
  <ash:when test="条件式">
    条件が真の場合のJSPの記述
  </ash:when>
</ash:choose>

Chooseタグハンドラのソース(ChooseTag.java)

 Choose/Whenタグは親子関係を持つタグです。
 Chooseタグハンドラは、doStartTagメソッドのみ実装します。 Chooseタグでは、Whenタグの条件が既に真となったかどうかのフラグを持ちます。

ChooseTag.java
// Copyright (C)1995-2002 ASH multimedia lab. http://ash.jp/
package jp.ash.taglib;

import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;

/**
 * 多分岐条件(Choose/When)タグライブラリ
**/
public class ChooseTag extends TagSupport {
  /** when条件フラグ **/
  boolean whenFlag;

  /** when条件フラグ設定 **/
  public void setWhenFlag(boolean whenFlag) {
    this.whenFlag = whenFlag;
  }
  /** when条件フラグ取得 **/
  public boolean getWhenFlag() {
    return whenFlag;
  }

  /** タグ初期処理 **/
  public int doStartTag() throws JspException {
    // when条件フラグの設定
    whenFlag = false;
    return EVAL_BODY_INCLUDE;
  }
}

Whenタグハンドラのソース(WhenTag.java)

 Whenタグハンドラは、doStartTagメソッドのみ実装します。 getParent()メソッドでChooseTagのフラグをチェックし、まだ真になっていない場合のみ判定します。 真になった場合は、親のChooseTagのフラグを設定することで、以降のWhenタグを評価しないようにします。

WhenTag.java
// Copyright (C)1995-2002 ASH multimedia lab. http://ash.jp/
package jp.ash.taglib;

import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;

/**
 * 多分岐条件(Choose/When)タグライブラリ
**/
public class WhenTag extends TagSupport {
  /** when条件 **/
  private boolean test;
  /** Chooseタグ **/
  private ChooseTag choose = null;

  /** when条件(test)の設定 **/
  public void setTest(boolean test) {
    this.test = test;
  }

  /** タグ初期処理 **/
  public int doStartTag() throws JspException {
    try {
      // Chooseタグの取得
      choose = (ChooseTag)getParent();
      if (choose == null) {
        throw new JspException("choose tag not found.");
      }
    } catch(Exception ex) {
      throw new JspException(ex);
    }

    // chooseタグのwhen条件フラグのチェック
    if (choose.getWhenFlag()) {
      return SKIP_BODY;
    }

    // if条件判定
    if (test) {
      // chooseタグのwhen条件フラグの設定
      choose.setWhenFlag(true);
      return EVAL_BODY_INCLUDE;
    } else {
      return SKIP_BODY;
    }
  }
}


Copyright (C)1995-2002 ASH multimedia lab.
mail : info@ash.jp