-ConverterとValidator

Tapestryコンポーネントにパラメータがあって、利用時に以下のように書けます。

<input jwcid="@TextField" type="text" class="styleClass"
    value="ognl:stringProperty" hidden="ognl:booleanProperty"/>

この例に出した属性はすべて機能が違います。かつ、Tapestryコンポーネント設定機能で用意されたすべての種類の属性を示しています。

  • jwcid
    • HTMLにはない属性です。
    • 名前を書いて設定XML(*.pageファイル)に定義を記述する際の識別子になります。これ重要
    • 独自の@演算子に続けてコンポーネント名を記述することで、コンポーネントをテンプレート内で生成することができます。これも重要。例ではこちらで例示しています。
  • type
    • HTMLにもある属性です。
    • TextFieldコンポーネントでは明示的に「ReservedParameter」と定義しています。
    • 値は無視され、コンポーネントが代わりに適切な値を自動で描画します。
  • class
    • HTMLにもある属性です。
    • TextFieldコンポーネントでは特にこのclass属性については何も定義していません。
    • 暗黙的に「InformalParameter」となります。
    • 値はそのまま、タグボディにレンダリングされます。
    • OGNL式が値のセットにのみ使えます(裏技ですな。弊社の林さんつっこみ、さんきゅ〜)。
  • value
    • HTMLにもある属性です。
    • TextFieldコンポーネントでは明示的に「Parameter」と定義しています。
    • OGNL式が使えます。
    • 描画時にはOGNL式にしたがって値が利用されます(描画されます)。
    • 例ではテンプレートに書いているのでできませんが、設定XMLを利用した場合、テンプレートと両方に書いておいて、テンプレートではデザイン確認用に用いることができます。これ重要
  • hidden
    • HTMLにはない属性です。
    • TextFieldコンポーネントでは明示的に「Parameter」と定義しています。
    • OGNL式が使えます。
    • 描画時にはOGNL式にしたがって値が利用されます(描画をコントロールします)。

converter属性とvalidator属性を使って委譲オブジェクトをユーザー定義させるのはOK。しかし、その属性のコントロールは、テンプレートエンジンではなく、コンポーネントに置くべきです。そうであればコンポーネント実装者がConverterとValidatorだけでなく、LoggerとかLayoutManagerとかを設定できるし、色とか複合コントロールの構成とかもパラメータ化できます。