いろいろ備忘録日記

主に .NET とか Go とか Flutter とか Python絡みのメモを公開しています。

Tapestry奮闘記-0005 (Insertコンポーネント2)

Insertコンポーネントは、表示の際のフォーマッターを指定できるように
なっています。

[ページ仕様ファイル]

<page-specification class="gsf.samples.tapestry.Home">
    <!--
        Insertコンポーネント

        単純な文字列の出力を担当する。

        こちらは、表示元の値をページコンポーネントクラスより
        取得する。
    -->
    <component id="insertText002" type="Insert">
        <!-- 
            value属性の値が出力される 

            ここでは、ognlを使用して現在日時を出力するよう指定し、
            さらに、format属性を指定して出力フォーマットを定めている。
        -->
        <binding name="value">ognl:currentDate</binding>
        <binding name="format">ognl:dateFormat</binding>
    </component>
</page-specification>

今回、ページコンポーネントクラスより、値を取得するように
設定しています。

[ページコンポーネントクラス]

// vim:set ts=4 sw=4 et ws ft=java fenc=cp932 ff=dos:
package gsf.samples.tapestry;

import java.util.*;
import java.text.*;

import org.apache.tapestry.html.*;

/**
 * Homeページ用のページコンポーネントクラス.<br/>
 * <br/>
 * ページコンポーネントクラスは、org.apache.tapestry.html.BasePage<br/>
 * クラスを継承して、作成する。tapestryには、バイトコードを実行時に<br/>
 * 拡張するフレームワークが存在するので、ページコンポーネントクラスは<br/>
 * abstractで宣言してもよい。その際は、セッターゲッターをabstractで<br/>
 * 宣言すると実行時にtapestry側で実装を拡張してくれる。<br/>
 *
 * <pre>
 * (クラス宣言例)
 * public abstract class Home extends BasePage{
 * }
 *
 * (メソッド宣言例)
 * public abstract String getName();
 * public abstract void   setName(String name);
 * </pre>
 */
public class Home extends BasePage{

    private Date   currentDate;
    private Format dateFormat;
    private String largeStrings;

    public Home(){
        this.currentDate  = new Date();
        this.dateFormat   = new SimpleDateFormat("yyyy/MM/dd hh:mm:ss");
        this.largeStrings = "改行付きの文字列<>&''[0]\n改行付きの文字列<>&''[1]\n改行付きの文字列<>&''[2]\n";
    }
    
    /**
     * Get currentDate.
     *
     * @return currentDate as Date.
     */
    public Date getCurrentDate(){
        return this.currentDate;
    }
    
    /**
     * Get dateFormat.
     *
     * @return dateFormat as Format.
     */
    public Format getDateFormat(){
        return this.dateFormat;
    }
    
    /**
     * Get largeStrings.
     *
     * @return largeStrings as String.
     */
    public String getLargeStrings(){
        return this.largeStrings;
    }
}

[テンプレートファイル]

<html jwcid="@Shell">
    <body jwcid="@Body">
        <!--
         ラベルとして、普通に文字列を出力する。
         (Insertコンポーネントを使用し、
         表示元の値をページコンポーネントクラスからの
         値とする)
        -->
        <br/>
        <hr/>
        <div id="insert_text_002" align="center">
            <b>
            Insertコンポーネントを使用して、文字列を出力
            <br/>
            表示元の値はページコンポーネントクラスから取得
            </b>
            <br/>
            出力された文字列: <span jwcid="insertText002"></span>
        </div>
        <hr/>
        <br/>
    </body>
</html>

表示を表示すると以下のように出力されます。

出力された文字列: 現在日付(yyyy/MM/dd hh:mm:ss形式)