gpt4 book ai didi

jsf-2 - p :selectOneMenu preselects previous item when noSelectionOption item is present

转载 作者:行者123 更新时间:2023-12-04 18:11:07 25 4
gpt4 key购买 nike

添加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>

模型:
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";
}

结果:

应该选择“Walid”项目,但是要选择“Ibrahim”。我认为PrimeFaces根据列表中的索引而不是项目的值来选择该项目。

这是怎么引起的,我该如何解决?

最佳答案

我可以重现您的问题。我查看了PrimeFaces源代码。这是PrimeFaces SelectOneMenuRenderer中的错误,该错误仅在使用带有noSelectionOption="true"的项目时才公开。渲染器不会为此生成背景<option>元素的HTML <select>元素,但是它将为此生成可视<li>列表的<ul>。换句话说,在您的情况下,<select>包含4个项目,而<ul>包含5个项目。 JavaScript会根据您怀疑的<li>的索引选择<option selected>。那解释了你的问题。

最好的选择是给PrimeFaces家伙report it as a bug。渲染器还应该为此生成<option>,或者JavaScript应该基于值而不是基于索引选择选项。

同时,将JSF配置为将空字符串提交的值解释为noSelectionOption="true"时,用itemValue="#{null}"替换itemValue=""null应该可以解决您的问题。

关于jsf-2 - p :selectOneMenu preselects previous item when noSelectionOption item is present,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14110755/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com