有一个问题p:selectOneMenu
添加时的选择f:selectItem
.
View:
<p:selectOneMenu value="#{selectionTest.selectedName}">
<f:selectItem itemLabel="Select" noSelectionOption="true" />
<f:selectItems value="#{selectionTest.allNames}" var="varName" itemLabel="#{varName}" itemValue="#{varName}" />
</p:selectOneMenu>
Model:
private List<String> allNames;
private String selectedName;
public MenuSelectionTestBean(){
allNames = new ArrayList<String>();
allNames.add("Ahmed");
allNames.add("Mohamed");
allNames.add("Ibrahim");
allNames.add("Walid");
selectedName ="Walid";
}
Result:
应选择项目“Walid”,但选择了“Ibrahim”。我认为 PrimeFaces 根据列表中的索引而不是项目的值来选择项目。
这是如何引起的以及如何解决?
我可以重现你的问题。我查看了 PrimeFaces 源代码。这是 PrimeFaces 中的一个错误SelectOneMenuRenderer
仅当项目具有noSelectionOption="true"
已被使用。渲染器不会生成 HTML<option>
背衬元素<select>
元素,但它会生成<li>
视觉的<ul>
列出这个。换句话说,<select>
您的箱子中包含 4 件物品,并且<ul>
5 项。这<li>
由 JavaScript 根据索引进行选择<option selected>
,正如你所怀疑的那样。这解释了你的问题。
你最好的选择是将其报告为错误致 PrimeFaces 的朋友们。渲染器还应该生成<option>
为此,或者 JavaScript 应该根据值而不是索引来选择选项。
同时,更换noSelectionOption="true"
by itemValue="#{null}"
,或者也itemValue=""
当 JSF 配置为将提交的空字符串值解释为null
,应该可以解决你的问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)