8

これは、何か奇妙なことが起こっている質問である理由です。

間違えて「cssClass」を使うことになっていたのですが、代わりに「class」と入力しました。ただし、「class」はtextareaタグのプロパティとして定義されていないため、動作はcssClass値と同じであると予想しました(未定義のプロパティはそのままレンダリングする必要があり、プロパティはレンダリングされますが、奇妙な値とその値は変更できないようです。フィードした値はすべて無視され、デフォルトでタグをサポートするクラスになります)。

たとえば、「七面鳥」の値を定義すると、七面鳥の値がhtmlでレンダリングされることが期待されます。これは、次の例でわかるようになります。

これが私がJSPで使用したものです:

<s:textarea turkey="" class="" name="qualLine.description" value="%{description}"/>

レンダリングされたものは次のとおりです。

<textarea name="qualLine.description" cols="" rows="" id="cows" class="class java.util.HashMap" turkey="">test</textarea>

クラスの代わりにcssClassを使用する必要があったので、私の質問は何をすべきかではありません。私の質問は次のとおりです。これは予想されることであり、その理由は何ですか。

4

3 に答える 3

2

おそらく、使用されているFreemarker TemplateModelに関連していますか?

dynamic-attributes.ftl動的属性を解決するためにから含まれる、ではtextarea.ftl、属性値は、インスタンスを使用してValueStackに対して最初に評価されStrutsUtil.translateVariablesます。インスタンスは、への静的呼び出しを使用するだけTestParseUtil.translateVariablesです。しかし、それが何も評価されない場合(nullまたはvoid)、属性名--classに戻ります。

次に、この値「クラス」は${class}、dynamic-attributes.ftlでFreemarker式として評価されます。

FreemarkerManagerStrutsUtilは、を呼び出してテンプレートモデルに配置ContextUtilするStruts2オブジェクトのマップを取得するFreemarkerテンプレートモデルに配置されます。TemplateModelに配置されるこのマップは、HashMap(おそらく原因マップ?)です。

ですから、これは明らかに完全な答えではないので、「答え」が受け入れられるとは思いませんが、コメントに入れるには多すぎて、光を当てるのに役立つかもしれません。週の後半に時間があれば、Struts2ソースをプルダウンして、実際の答えを見つけるために試してみることができます。しかし、おそらく、私は時間がかかりません!

しかし、確かに興味深い質問です。

于 2012-09-17T02:33:06.493 に答える
0

使用する

cssClass="input-sm"

それ以外の

クラス="input-sm"

次のようなStruts入力を使用する場合

<s:textfield cssClass=input-sm id="a" key="" name="" placeholder="Required"/>
于 2013-12-03T20:23:32.650 に答える
0

これは、すべての Java オブジェクトにgetClass()、オブジェクトのランタイム クラスを返すメソッドがあるために発生しますjava.util.HashMap。このように、は textarea タグに対して定義されていませんが、textareaの動作を実装するクラスであるTextareaTagclassクラスに対して定義されています。これは、すべてのタグが最後に Java クラスで実装されるため、jsps のすべてのタグで発生します。

そのため、Struts チームcssClassは単にclass.

于 2012-08-31T11:25:37.913 に答える