3

struts 2、テキストフィールドなどのタグ UI タグに属性を動的に追加する方法はありますか?

その理由は、アクションのメソッドの結果に応じて、readOnlyフォーム フィールド属性をに追加したいからです。属性が定義されると、フォーム要素は値に関係なく読み取り専用になるため、<s:textfield/>使用できません。readOnly="%{isReadOnly()}"また、各フォーム フィールドをタグにラップするの<s:if/>は非常に面倒で、多くのコードの重複が発生します。

また、相互運用性の理由と、ブラウザーのスクリプト設定に依存しないという理由から、JavaScript も避けたいと思います。

4

1 に答える 1

2

問題が組み込みの struts2 機能を使用することである場合、1 つの簡単なオプションは、属性の動的な追加を容易にサポートする freemarker を使用してビューをレンダリングすることです。

規則を使用している場合、拡張子が「.ftl」のファイルを作成するだけで非常に簡単です。xml を使用している場合は、freemarker の結果タイプを使用するだけで非常に簡単です (詳細については、こちらを参照してください)。

<action name="test" class="package.Test">
  <result name="success" type="freemarker">/WEB-INF/content/testView.ftl</result>
</action>

マップを使用して属性を動的に追加するビューの例を次に示します (例も「いいね!」ページから取得):

<@s.textfield name="test" dynamicAttributes={"placeholder":"input","foo":"bar"}/>

dynamicAttributes はすべての JSP UI タグで非常に便利ですが、残念ながら現在は実装されていません。

: 上記のリンクには 1 つの誤りまたは脱落があります。私の環境でエラーを引き起こす次の行を追加するように指示します(単に行は必要ありません)。

<#assign s=JspTaglibs["/WEB-INF/struts.tld"] /> 

つまり、ファイル内のこの行だけで、テキスト要素をレンダリングするのに十分であり、明示なタグ ライブラリ宣言は必要ありません!

<@s.textfield name="test" dynamicAttributes={"placeholder":"input","foo":"bar"}/>

単純な JSP よりも freemarker を使用することには多くの利点があるため、少し時間を取って構文を調べて、この 1 つのケースでそれを使用すると、後で役に立つことがわかるかもしれません。

于 2012-09-10T00:15:46.927 に答える