2016-05-25 11 views
1

私はStruts1プロジェクトをStruts2に移行する作業を進めています。そして私は次のコードを見つけました。Struts2 selectタグ - 動的にオプションを追加する

<html:select ...> 
    <logic:iterate id="something" name="" type=""> 
    <logic:equal name="something" property="" value=""> 
     <html:option value=""><bean:write ... /></html:option> 
    </logic:equal> 
    </logic:iterate> 
</html:select> 

条件が満たされると、イテレータの値をチェックし、選択リストに選択肢を動的に追加します。

Struts2のselectタグと似たような方法を実現するにはどうすればいいですか?

AFAIK、Struts2 selectタグはプレーンなhtmlオプションタグでも正しく動作しません。

+0

選択タグで論理演算を行う必要はありません。ロジックをアクションに移動するだけです。 –

+0

@RomanCロジックを動かすことなく、それを行う方法はありますか? – Will

+0

選択タグなしで実行できます。 –

答えて

1

実際、Struts2 selectタグでは、タグの本体にhtmlのoptionタグを使用できません。これは、list属性を使用して、キー/値のペアを持つオブジェクトの形式でデータを提供するためです。 listKeylistValueを使用して、レンダリングオプションに使用されるオブジェクトのプロパティを定義できます。 selectタグのUIタグリファレンスガイドを見ることができます。レンダリングhtmlをカスタマイズできる多くの属性があります。

selectタグの実際的な使用方法:めったに使用されません。これは、固定サイズのリストや、OGNLを使用してJSPで作成したマップを表示する場合に便利です。例えば、大きなリストでは

<s:select label="Months" 
     name="months" 
     headerKey="-1" headerValue="Select Month" 
     list="#{'01':'Jan', '02':'Feb', [...]}" 
     value="selectedMonth" 
     required="true" 
/>  

autocompleterウィジェットを使用することを検討してください。選択ボックスとしてオートコンプリートを使うことも、オートコンプリートとしてウィジェットを選択することもできます。 selectautocompleterウィジェットのすべての例は、Struts2 Jquery Showcaseに表示されます。

Struts1からStruts2に移行するときに、レンダリングされたhtml selectタグを提示する問題に直面しました。これは、Struts2ではタグ本体内のオプションが許可されないためです。したがって、オプションのリストを構築することは、アクションのprepare()メソッドで行うことができます。このユースケースの例は、this answerと読むことができます。

あなたは、コントローラからではなく、ビューからモデルと作業している、とモデルを表示する準備ができているとき、あなたがHTMLをレンダリングするか、DOMを取り込むために、いくつかのタグやウィジェットを使用しているため、このアプローチが望ましい理由。または、AjaxまたはAngularサービスを使用してStruts2コントローラーからモデルをロードすることもできます。データはJSON形式で転送されます。 JSONは、JavaフレームワークとJavaScriptフレームワークの間でデータを転送するための非常に強力なツールです。今


あなたはまだイテレータを経由して、HTML selectタグをレンダリングするためにマップを使用する場合は、次のコードを使用することができます。

<select id="monthId" name="form.monthId"> 
    <s:iterator var="month" value="%{months}"> 
    <s:if test="month.value != 'May'"> 
     <option value="${month.key}" ${month.key == form.monthId?'selected="selected"':''}> 
     <s:property value="%{month.value}"/> 
     </option> 
    </s:if> 
    </s:iterator> 
</select> 

オプションを事前に選択するために使用されるEL式は、StrutsのリクエストラッパーによるvalueStack変数へのアクセス権を持つべきであることに注意してください。 How we use JSTL with the frameworkを参照してください。

関連する問題