ifカスタムタグでは、test属性で指定した条件が真の場合に、BODYの内容を出力します。
<ash:if test="条件式"> 条件が真の場合のJSPの記述 </ash:if> |
タグハンドラは、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カスタムタグでは、多分岐条件をサポートします。 whenタグのtest属性で指定した条件が真の場合に、そのBODYの内容を出力します。
<ash:choose> <ash:when test="条件式"> 条件が真の場合のJSPの記述 </ash:when> ..... <ash:when test="条件式"> 条件が真の場合のJSPの記述 </ash:when> </ash:choose> |
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タグハンドラは、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; } } } |