dictionary - f :selectItem's key and value inverted when feeding from a map

标签 dictionary jsf-2 selectonemenu

在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>

从某种意义上说, map 的值将在选项的value属性中设置,而键将在其标签中设置。

我找到了这个JIRA JIRA 1808,其中解释了必须写错 map 的含义(主要是唯一性),但我不太明白为什么要纠正它

'disruptive and backwards incompatible'.



这是否来自JSF的早期版本?如果是这样,有人知道这样的原因吗?

只是好奇是否有不解决此问题的解释。

最佳答案

最初的推理毕竟很简单:下拉列表标签唯一性的优先级要高于下拉列表标签的唯一性。带有两个相同标签的下拉菜单更像是“wtf?”对于最终用户而言,其下拉菜单具有两个相同的值。映射键可确保唯一性。我确实曾经在您自己链接的问题报告中报告过技术上的不直观。但是,这是一个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>

也可以看看:
  • Our <h:selectOneMenu> tag info page
  • 关于dictionary - f :selectItem's key and value inverted when feeding from a map,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9893556/

    相关文章:

    python - 如何使用 pandas 选择组中的前一行?

    jsf - primefaces 日历 : how to set dynamically mindate

    ajax - 你能更新一个 h :outputLabel from a p:ajax listener?

    jsf - 延迟加载 f :selectItems when opening p:selectOneMenu

    python - 合并两个词典的部分以创建一个新词典

    dictionary - 在 Go 中构建用户定义的 map

    C# : Merging Dictionary and List

    jsf - 如何在 Primefaces 中获取带有当前时间戳的选定日期?

    验证错误: Value is not valid

    jsf - 如何加载和显示依赖 h :selectOneMenu on change of a h:selectOneMenu