eha*_*aat 5 facelets selected selectonemenu primefaces jsf-2
p:selectOneMenu添加时选择存在问题f:selectItem.
视图:
<p:selectOneMenu value="#{selectionTest.selectedName}">
<f:selectItem itemLabel="Select" noSelectionOption="true" />
<f:selectItems value="#{selectionTest.allNames}" var="varName" itemLabel="#{varName}" itemValue="#{varName}" />
</p:selectOneMenu>
Run Code Online (Sandbox Code Playgroud)
模型:
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";
}
Run Code Online (Sandbox Code Playgroud)
结果:

应选择"Walid"项,但选择"Ibrahim".我认为PrimeFaces根据列表中的索引选择项目,而不是项目的值.
这是怎么造成的,我该如何解决?
我可以重现你的问题.我查看了PrimeFaces的源代码.这是PrimeFaces中的一个错误,SelectOneMenuRenderer只有在使用了某个项目时才会公开noSelectionOption="true".渲染器不会为其生成<option>支持<select>元素的HTML 元素,但会为其生成<li>可视<ul>列表.换句话说,<select>在你的情况下包含4项和<ul>5项.它<li>是由JavaScript根据<option selected>您所怀疑的索引选择的.这解释了你的问题.
你最好的办法是将它作为一个错误报告给PrimeFaces的人.渲染器也应生成<option>for,或JavaScript应根据值而不是索引选择选项.
同时,替换noSelectionOption="true"by itemValue="#{null}",或者itemValue=""当JSF配置为将空字符串提交值解释为时null,应该可以解决您的问题.
| 归档时间: |
|
| 查看次数: |
2510 次 |
| 最近记录: |