6

JSF のタグで、Map<Key, Value>

<h:selectOneMenu value="#{bean.integerProperty}">
  <f:selectItems value="#{bean.mapProperty}"/>
</h:selectOneMenu>

結果の HTML は、予想とは逆になります。

<select>
  <option selected="selected" value="MapValue1">MapKey1</option>
  <option value="MapValue2">MapKey2</option>
  <option value="MapValue3">MapKey3</option>
</select>

マップの値がオプションの value 属性に設定され、キーがそのラベルに設定されるという意味で。

私はこの JIRA JIRA 1808を見つけました。ここでは、間違ったマップを書かなければならないことの意味が説明されています (主に一意性)。

「破壊的で後方互換性がない」。

これは以前のバージョンの JSF に由来するものですか? もしそうなら、このような理由があるかどうか誰かが知っていますか?

これを修正しないという説明があるかどうかに興味があります。

4

1 に答える 1

11

最初の理由は単純です。ドロップダウン ラベルは、ドロップダウン値よりも一意であることが優先されます。2 つの同じラベルを持つドロップダウンは、より「wtf?」になります。エンドユーザーにとっては、2 つの同じ値を持つドロップダウンよりも。マップ キーは一意性を保証します。私は実際に、あなたが自分自身をリンクした問題レポートで技術的な非直感性を報告したことがあります。ただし、これは WONTFIX です。JSF 2.2 で変更された場合、JSF 2.0 / 2.1 との下位互換性はなくなります。

お使いの環境が EL 2.2 (Tomcat 7、Glassfish 3 など) をサポートしている場合は、次のように簡単に交換できます。

<h:selectOneMenu value="#{bean.integerProperty}">
  <f:selectItems value="#{bean.mapProperty.entrySet()}" var="entry" 
     itemValue="#{entry.key}" itemLabel="#{entry.value}" />
</h:selectOneMenu>

以下も参照してください。

于 2012-03-27T16:26:45.143 に答える