パラメータの型変換

Tapestryは自動的にパラメータの型変換を行います。

(テンプレート内またはアノテーションでバインドされている)パラメータに値が渡されるとき、 その値の型とパラメータの型が一致しない場合に型変換が行われます。

次のCountコンポーネントを例にして考察します:

public class Count
{
    @Parameter
    private int start = 1;

    @Parameter(required = true)
    private int end;

    @Parameter
    private int value;
    
    . . .

この例では、3つのパラメータ全てが int です。

しかし、このコンポーネントは次のように使われることがあるでしょう:

  Merry Christmas: <t:count end="3"> Ho! </t:count>

ただの整数はpropバインディングプリフィックスによってlong型として解釈されます。つまり、上の例は long 値の3です。

Tapestryはバインドされたlong値をパラメータの型であるintに自動的に変換します。 この変換では値を失うことがあります(long型で表されている値がint型の保持できる範囲を超えている場合に)。

TypeCoercerサービス

型変換を行うのはTypeCoercerサービスです。このサービスはtapestry-iocモジュールの一部で、 ここで述べられています。 このサービスにはとても拡張性があり、新しい型と変換を追加するのは簡単です。 TapestryModuleはTypeCoercerサービスにいくつかの型変換を追加しています。