| ページ一覧 | ブログ | twitter |  書式 | 書式(表) |

MyMemoWiki

「Struts2 カスタムタグ 文法」の版間の差分

提供: MyMemoWiki
ナビゲーションに移動 検索に移動
(ページの作成:「==Struts2 カスタムタグ 文法== {{include_html import_keyword_html, "!struts2"}} カスタムタグは、動的なデータを表示するように設計されて…」)
 
4行目: 4行目:
  
 
'''動的 input field の生成'''
 
'''動的 input field の生成'''
  <s:textfield name="postalCode"/>
+
  &lt;s:textfield name="postalCode"/&gt;
  
 
もし、"postalCode"プロパティが、value stack にある場合、input フィールドには、その値がセットされます。フィールドがフレームワークにサブミットされたとき、コントロールの値は、"postalCode"プロパティにセットされます。
 
もし、"postalCode"プロパティが、value stack にある場合、input フィールドには、その値がセットされます。フィールドがフレームワークにサブミットされたとき、コントロールの値は、"postalCode"プロパティにセットされます。
11行目: 11行目:
  
 
'''ラベルのセットに式を使用する'''
 
'''ラベルのセットに式を使用する'''
  <s:textfield label="%{getText("postalCode.label")}" name="postalCode"/>
+
  &lt;s:textfield label="%{getText("postalCode.label")}" name="postalCode"/&gt;
  
[http://struts.apache.org/2.x/docs/ognl.html OGNL 式言語]は、メソッドを呼び出し、プロパティを評価します。
+
[[http://struts.apache.org/2.x/docs/ognl.html OGNL 式言語]]は、メソッドを呼び出し、プロパティを評価します。
 
getTextメソッドは、ActionSupportにより提供されています。ActionSupportは、ほとんどのアクションの基底クラスです。
 
getTextメソッドは、ActionSupportにより提供されています。ActionSupportは、ほとんどのアクションの基底クラスです。
 
Actionは、スタックに乗っているため、getTextを含む、どのメソッドも式から呼び出すことができます。
 
Actionは、スタックに乗っているため、getTextを含む、どのメソッドも式から呼び出すことができます。
23行目: 23行目:
  
 
'''booleanを評価'''
 
'''booleanを評価'''
  <s:select label="%{getText("state.label")}" name="state" multiple="true"/>
+
  &lt;s:select label="%{getText("state.label")}" name="state" multiple="true"/&gt;
  
 
multiple 属性は、booleanプロパティにマップされるため、フレームワークは値をStringと解釈しません。
 
multiple 属性は、booleanプロパティにマップされるため、フレームワークは値をStringと解釈しません。
31行目: 31行目:
  
 
'''boolean を評価(詳細)'''
 
'''boolean を評価(詳細)'''
  <s:select label="%{getText("state.label")}" name="state" multiple="%{true}"/>
+
  &lt;s:select label="%{getText("state.label")}" name="state" multiple="%{true}"/&gt;
  
 
'''boolean を評価(プロパティの使用)'''
 
'''boolean を評価(プロパティの使用)'''
  <s:select label="%{getText("state.label")}" name="state" multiple="allowMultiple"/>
+
  &lt;s:select label="%{getText("state.label")}" name="state" multiple="allowMultiple"/&gt;
  
 
'''boolean を評価(プロパティの使用 詳細)'''
 
'''boolean を評価(プロパティの使用 詳細)'''
  <s:select label="%{getText("state.label")}" name="state" multiple="%{allowMultiple}"/>
+
  &lt;s:select label="%{getText("state.label")}" name="state" multiple="%{allowMultiple}"/&gt;
  
 
===value は オブジェクト!===
 
===value は オブジェクト!===
46行目: 46行目:
  
 
'''きっと動作しない!'''
 
'''きっと動作しない!'''
  <s:textfield label="%{getText("state.label")}" name="state" value="CA"/>
+
  &lt;s:textfield label="%{getText("state.label")}" name="state" value="CA"/&gt;
  
 
もし、textfield が、"CA"という値を渡されたら、フレームワークは、getCa プロパティを探す。おそらくそれは、意図するところではない。文字列を渡すことを意図しているはずだ。式言語においては、定数は、引用符に囲んで表す。
 
もし、textfield が、"CA"という値を渡されたら、フレームワークは、getCa プロパティを探す。おそらくそれは、意図するところではない。文字列を渡すことを意図しているはずだ。式言語においては、定数は、引用符に囲んで表す。
  
 
'''文字列定数を渡す正しい方法'''
 
'''文字列定数を渡す正しい方法'''
  <s:textfield label="%{getText("state.label")}" name="state" value="%{'CA'}" />
+
  &lt;s:textfield label="%{getText("state.label")}" name="state" value="%{'CA'}" /&gt;
  
 
もうひとつの方法は、value="'CA'"とする方法だ。しかし、こういった例では、式言語の記法を推奨する。
 
もうひとつの方法は、value="'CA'"とする方法だ。しかし、こういった例では、式言語の記法を推奨する。

2020年2月15日 (土) 08:06時点における版

Struts2 カスタムタグ 文法

テンプレート:Include html import keyword html, "!struts2" カスタムタグは、動的なデータを表示するように設計されています。"postalCode"プロパティを表示するinput フィールドを生成するには、"postalCode"を textfield タグに渡します。

動的 input field の生成

<s:textfield name="postalCode"/>

もし、"postalCode"プロパティが、value stack にある場合、input フィールドには、その値がセットされます。フィールドがフレームワークにサブミットされたとき、コントロールの値は、"postalCode"プロパティにセットされます。

しばしば、動的なデータをタグに渡したい場合があります。例えば、inputフィールドとラベルを表示する場合に、ラベルの内容をアプリケーションの メッセージリソースから取得したいとします。この場合、適宜フレームワークはタグの属性に含まれる式を解析するので、動的な属性をタグに混ぜ込むことができます。式のエスケープシーケンスは、"%{ ... }" です。エスケープシーケンスに埋め込まれたどのようなテキストも、式として評価されます。

ラベルのセットに式を使用する

<s:textfield label="%{getText("postalCode.label")}" name="postalCode"/>

[OGNL 式言語]は、メソッドを呼び出し、プロパティを評価します。 getTextメソッドは、ActionSupportにより提供されています。ActionSupportは、ほとんどのアクションの基底クラスです。 Actionは、スタックに乗っているため、getTextを含む、どのメソッドも式から呼び出すことができます。

文字列ではない属性属性

HTTPプロトコルは、テキストベースですが、いくつかのタグは、文字列ではない属性型を持ちます。例えば、boolやintなど。 文字列ではない属性を利用するため、フレームワークが全ての文字列ではない属性を式として評価します。 以下の例では、エスケープ記法を使用する必要はありません。(もし付加したとしても、フレームワークが取り除きます)

booleanを評価

<s:select label="%{getText("state.label")}" name="state" multiple="true"/>

multiple 属性は、booleanプロパティにマップされるため、フレームワークは値をStringと解釈しません。 値は式として評価され、自動的にbooleanに変換されます。

属性がStringかそうでないかは忘れやすいため、エスケープ記法を使用することもできます。

boolean を評価(詳細)

<s:select label="%{getText("state.label")}" name="state" multiple="%{true}"/>

boolean を評価(プロパティの使用)

<s:select label="%{getText("state.label")}" name="state" multiple="allowMultiple"/>

boolean を評価(プロパティの使用 詳細)

<s:select label="%{getText("state.label")}" name="state" multiple="%{allowMultiple}"/>

value は オブジェクト!

ほとんどの場合、value属性は自動でセットされるので、name属性は通常どのプロパティをvalueにセットするのかをフレームワークに教えます。 しかし、valueを直接設定する理由がある場合、valueは、オブジェクトであり、Stringではないことを承知しておく必要がある。

※ valueはStringではないため、いつでも、valueは評価されるべき式として渡される。- 文字列定数としてではない。

きっと動作しない!

<s:textfield label="%{getText("state.label")}" name="state" value="CA"/>

もし、textfield が、"CA"という値を渡されたら、フレームワークは、getCa プロパティを探す。おそらくそれは、意図するところではない。文字列を渡すことを意図しているはずだ。式言語においては、定数は、引用符に囲んで表す。

文字列定数を渡す正しい方法

<s:textfield label="%{getText("state.label")}" name="state" value="%{'CA'}" />

もうひとつの方法は、value="'CA'"とする方法だ。しかし、こういった例では、式言語の記法を推奨する。

要約すれば、タグの属性は、3つのルールにより評価される。

  1. 全ての文字列属性型は、"%{ ... }"として、解析される。
  2. すべての文字列でない属性型は、解析されない。しかし、直接式が書かれたものとして評価される。
  3. 文字列ではない属性でエスケープ記法"{%{}"を利用した場合、ルール2の例外となる。この記法は冗長として無視され、内容が評価される。