Primefaces 6.1 SelectOneMenu 选择 itemLabel 作为值

Primefaces 6.1 SelectOneMenu pick itemLabel as value

我正在使用 PrimeFaces 6.1 SelectOneMenu 呈现 editable/filtered 下拉菜单,其中 itemLabel/value 作为 selectItems。不幸的是,selectOneMenu pick itemLabel as value 把它放在我的 selectOneMenu 值字段中。这是一个非常烦人的问题,也许这是一个错误。

这是我的代码片段:

我正在使用 Map 将 ID/Name 对保存为 selectItems:

Map<String,String> hm = new HashMap<String, String>();
hm.put("Cust001","John Dow");
hm.put("Cust002","Mark Polo");
hm.put("Cust003","Noel Max");

然后我把它放在我的 selectOneMenu 中:

<p:selectOneMenu id="selectCustomerId" value="#{paymentControlBean.selectedCustomerId}" effect="fold" editable="true" filter="true" filterMatchMode="startsWith">
   <p:ajax update="paymentListToolbar"/>
   <f:selectItems value="#{hm.entrySet()}" var="entry" itemValue="#{entry.key}" itemLabel="#{entry.value}"/>
</p:selectOneMenu>

下拉列表渲染工作正常,但是当我从下拉列表中选择一个然后按处理它时。我的支持 bean paymentControlBean.selectedCustomerId 显示 "John Dow",这意味着,selectOneMenu 将我的 itemLabel 选择到我的 selectOneMenu 的值字段中。

我尝试将 PrimeFaces 元素更改为 p:selectOneListBox 并保持一切不变,重复处理,我的支持 bean 显示 "Cust001",工作正常。

从这个比较中我发现,PrimeFaces 6.1 中肯定存在严重的错误,PrimeFaces 5.2 中也存在同样的错误。

SelectOneMenu 在下拉列表选择中非常流行,尤其是当我们必须使用 Map 处理 key/value 对时。

如果这不是错误,我可以做什么或有其他解决方法来让它在我的 selectItems 中获得正确的值?

请指教>

我已经用这个 PR 修复了它:https://github.com/primefaces/primefaces/pull/2870

它将出现在 2017 年 11 月发布的 PrimeFaces 6.2 版本中。