电话号码:selectOneMenu用于预选前一个项目时noSelectionOption项存在(p

2019-07-17 17:57发布

还有一个问题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";
}

结果:

项目“瓦利德”应选择,但“易卜拉欣”改为选择。 我认为,PrimeFaces选择取决于其在列表中的索引,而不是项目的价值的项目。

这是怎么造成的,我该怎么解决呢?

Answer 1:

我可以重现你的问题。 我看着在PrimeFaces源代码。 这是一个在PrimeFaces错误SelectOneMenuRenderer只有当一个项目,其暴露noSelectionOption="true"时被使用。 渲染器将不生成HTML <option>的元素的背衬<select>该元素,但它会产生<li>视觉的<ul>列表为该。 换句话说,所述<select>你的情况包含4个项目和<ul> 5个项目。 的<li>是由JavaScript基于所述的所选索引<option selected> ,完全按照自己的怀疑。 这也解释了你的问题。

最好的办法是到其报告为一个bug到PrimeFaces家伙。 渲染器也应生成<option>为是,或JavaScript的选择应基于值,而不是在索引的选项。

同时,更换noSelectionOption="true"itemValue="#{null}" ,或者也可以itemValue=""当JSF配置成将空字符串提交的值作为null ,应该解决您的问题。



文章来源: p:selectOneMenu preselects previous item when noSelectionOption item is present