Primefaces 6.1选择一菜单选择项标签作为值

Primefaces 6.1选择一菜单选择项标签作为值,primefaces,label,jsf-2.2,selectonemenu,Primefaces,Label,Jsf 2.2,Selectonemenu,我正在使用PrimeFaces 6.1 SelectOneMenu呈现一个可编辑/过滤的下拉菜单,其中itemLabel/value为selectItems。不幸的是,selectOneMenu选择itemLabel作为值将其放在我的selectOneMenu值字段中。这是一个非常烦人的问题,可能是一个bug 下面是我的代码片段: 我正在使用Map将ID/名称对保存为selectItems: Map<String,String> hm = new HashMap<String,

我正在使用PrimeFaces 6.1 SelectOneMenu呈现一个可编辑/过滤的下拉菜单,其中itemLabel/value为selectItems。不幸的是,selectOneMenu选择itemLabel作为值将其放在我的selectOneMenu值字段中。这是一个非常烦人的问题,可能是一个bug

下面是我的代码片段:

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

Map<String,String> hm = new HashMap<String, String>();
hm.put("Cust001","John Dow");
hm.put("Cust002","Mark Polo");
hm.put("Cust003","Noel Max");
Map hm=newhashmap();
hm.put(“Cust001”、“John Dow”);
hm.put(“Cust002”、“马克·波罗”);
hm.put(“Cust003”、“Noel Max”);
然后我把它放在我的SelectOne菜单中,如下所示:

<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将我的项目标签选择到我的selectOneMenu的值字段中

我试图将PrimeFaces元素更改为p:selectOneListBox,并保持所有内容不变,重复处理,我的备份bean显示为“Cust001”,这很好

通过比较,我发现PrimeFaces 6.1中肯定存在严重的错误,PrimeFaces 5.2中也存在同样的错误

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

如果它不是一个bug,我可以做些什么或有其他的工作来让它在我的selectItems中获得正确的价值


请告知>

我已经用此PR修复了它:


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

此版本也被添加到问题跟踪程序中的PrimeFaces中,请查找:它在PrimeFaces 5.3上有效吗?我们的应用程序中也有selectOneMenues,没有任何问题(在最新的primefaces elite版本中,但在5.3中,一切都正常)。不同之处在于我们没有效果,它们不可编辑和过滤。您是否尝试删除过滤器、编辑和效果?此错误可能是由此附加属性之一引起的。感谢您的提醒。我关闭了除id和value字段之外的所有功能,重新编译,然后再次运行,效果很好。从那时起,我添加了可编辑、筛选、筛选模式,并再次对其进行测试。死去的这意味着,如果同时选择可编辑和筛选的项目(项目标签/值对),将导致selectOneMenu选择项目标签作为值。