2012-08-31 9 views
7

これは単なる奇妙な問題です。"class"属性を追加するStruts2 UIのtextareaタグは、 "class java.util.HashMap"の値で自己充足します。

私は間違いを犯し、 "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> 

I 使用している必要がありますので、私の質問は、私が何をすべきではありませんクラスの代わりにcssClass、私の質問は:これは期待され、なぜですか?

+0

が、それはあなたのアプリケーションまたは単にこの特定のページにどこにでも発生している、問題は少し奇妙に思える –

+1

私はこれをチェックし、それは、 '' で起こる ''、 ''すぎ... – Pigueiras

+0

@Pigueiras:クラスを 'java.util.HashMap'として表示していると言います。 –

答えて

0

これは、すべてのJavaオブジェクトに、オブジェクトの実行時クラスを返すgetClass()というメソッドがあるためです(java.util.HashMap)。この方法では、classはtexteareaタグに定義されていませんが、テキストエリアの動作を実装するクラスであるTextareaTagクラスに対して定義されています。これはあなたのJSPのすべてのタグで起こります。なぜならそれらのすべてが最後にJavaクラスで実装されているからです。

だから、私はStrutsチームがcssClassを使っているのは、classだと思います。

+0

これをもう一度チェックします。ありがとうございます。 – Quaternion

+0

私はこの振る舞いの実装を提供する答えを受け入れますが、(Tag)に指摘されたものはインターフェースでした。 – Quaternion

+0

あなたは正しいです、タグはインターフェイスです(私の悪い)。私はテキストエリアの実装で答えを編集しました。もちろん、 'Tag'インターフェースを実装しています。 – admenva

2

おそらく、使用されているFreemarker TemplateModelに関連していますか?動的属性を解決するために、textarea.ftlから含まれdynamic-attributes.ftlにおいて

、属性値は、第1だけTestParseUtil.translateVariablesに静的呼び出しを使用StrutsUtil.translateVariablesインスタンスを使用してValueStackに対して評価されます。しかし、それが何か(nullまたはvoid)に評価されないとき、それは属性name - classに戻ります。

この値 "class"は、次に、freemarker式 - ${class} - として、dynamic-attributes.ftlに評価されます。

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

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

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

+0

これはちょっと後で私はトレースしていただきありがとうございます。 – Quaternion

0

使用

のCssClass = "入力-SM"

代わりの

クラスあなたがストラット入力を使用する= "入力-SM"

like

<s:textfield cssClass=input-sm id="a" key="" name="" placeholder="Required"/> 
+0

私はあなたが質問を再読すると、 "class"属性を使う効果に興味があり、 "cssClass"の正しい使い方を知っていることがわかります。 – Quaternion

関連する問題