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;
}
}
}
|