【发布时间】:2018-04-06 02:19:54
【问题描述】:
我正在使用 PrimeFaces 6.1 SelectOneMenu 来呈现一个可编辑/过滤的下拉菜单,其中 itemLabel/value 作为 selectItems。不幸的是,selectOneMenu 选择 itemLabel 作为值将它放在我的 selectOneMenu 值字段中。这是一个非常烦人的问题,可能是一个错误。
这是我的sn-p代码:
我正在使用 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 中一定存在一个严重的 bug,PrimeFaces 5.2 中也存在同样的 bug。
SelectOneMenu 在下拉列表选择中非常流行,尤其是当我们必须使用 Map 处理键/值对时。
如果它不是错误,我可以做什么或有其他解决方法以使其在我的 selectItems 中获得正确的值?
请指教>
【问题讨论】:
-
此问题也已添加到问题跟踪器中的 PrimeFaces,请查找:github.com/primefaces/primefaces/issues/2862
-
它是否适用于 Primefaces 5.3?我们的应用程序中也有 selectOneMenues 没有任何问题(在最新的 primefaces 精英版本上,但在 5.3 上也一切正常)。不同之处在于我们没有效果,它们不可编辑和过滤。您是否尝试过删除过滤器、编辑和效果?可能错误是由这些附加属性之一引起的。
-
感谢您的提醒。我关闭了除 id 和 value 字段之外的所有内容,重新编译并再次运行它,它工作正常。此后我添加了editable、filter、filterMatchMode,再次测试。死的。这意味着,如果 selectItems(itemLabel/Value 对)同时具有可编辑和过滤功能,将导致 selectOneMenu 选择 itemLabel 作为值。
标签: primefaces label jsf-2.2 selectonemenu