2007年10月16日火曜日

TagSupport クラス

public class TagSupport
    implements IterationTag, Serializable

protected String id
    id 属性の値を格納します。
protected PageContext pageContext
_______

TagSupport クラスは IterationTag インターフェースを実装してさらに便利なメソッドを付け加えてタグハンドラクラスを作成しやすくしています。


  1. TagSupport クラスにはあらかじめ id プロパティ(変数)が定義されています。

  2. getId メソッドで id キーの値を取得できる。

  3. public Object getValue(String key) で各プロパティ値を取得できる。

  4. public Enumeration<String> getValues メソッドですべてのキーを取得できます。

  5. public static final Tag findAncestorWithClass(Tag from,
            Class klass) メソッド
    指定されたクラスに最も近いタグを返す。 Tag インターフェースの getParent メソッドを呼び出す。
    from 検索を始めるタグ
    klass 検索するタグ


________

<サンプル>
scwcdTaglib.tld
    <tag>
        <name>tagsupportsample</name>
        <tag-class>scwcd.TagSupportSample</tag-class>
        <body-content>emply</body-content>
        <dynamic-attributes>true</dynamic-attributes>
    </tag>
________

web.xml
    <jsp-config>
        <taglib>
            <taglib-uri>/scwcdTaglib</taglib-uri>
            <taglib-location>/WEB-INF/tlds/scwcdTaglib.tld</taglib-location>
        </taglib>
    </jsp-config>
________

TagSupportSample.java
package scwcd;
import java.io.IOException;
import java.util.Enumeration;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.DynamicAttributes;
import javax.servlet.jsp.tagext.TagSupport;

public class TagSupportSample extends TagSupport 
        implements DynamicAttributes {
    public void setDynamicAttribute(
            String uri, String key, Object value) 
                throws JspException {
        setValue(key, value);
    }
    public int doStartTag() throws JspException {
        JspWriter out = pageContext.getOut();
        Enumeration<String> keys = getValues();
        while (keys.hasMoreElements()) {
            try {
                String key = keys.nextElement();
                out.println("キー : " + key + 
                        " 値 : " + getValue(key) + 
                        "<br />");
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return SKIP_BODY;
    }
}
________

tagsupportsample.jsp
<%@ page contentType="text/html;charset=Shift_JIS"%>
<%@ taglib prefix="certified" uri="/scwcdTaglib"%>
<html>
<body>
<certified:tagsupportsample name="Takashi" age="unknown" />
</body>
</html>
________

<出力結果>
キー : age 値 : unknown
キー : name 値 : Takashi

0 件のコメント: