【问题标题】:primefaces selectonemenu change event not working for null valueprimefaces selectonemenu更改事件不适用于空值
【发布时间】:2015-09-25 14:20:57
【问题描述】:

我有一个包含一些项目的选择菜单。还有一个用于显示“请选择一个”的空项目.. 我的目标是在选择其中一个数据时查询一些数据。如果我选择“请选择一个”做另一件事。

但最终,更改事件会针对正常值触发,但如果我选择“请选择一个”项目,则不会触发它。谢谢你的帮助。这是我的代码。

<p:selectOneMenu style="width: 200px" id="positionForward" value="#{hrProcessController.queryCriteria.positionForward}" converter="listConverter"
                                             effect="fade" var="u" filter="true" filterMatchMode="startsWith" validator="#{hrProcessController.isOpenPositionForwValid}">
                                <f:selectItem itemLabel="#{menu['onemenu.choose']}" itemValue="#{null}"/>
                                <f:selectItems value="#{hrProcessController.positionList}" var="position" itemLabel="#{position.name}" itemValue="#{position}" />
                                <p:ajax event="change" listener="#{hrProcessController.onPositionSelect}" update="openPositionForward"/>

                                <p:column>
                                    <h:outputText value="#{u==null ? menu['onemenu.choose'] : u.name}" />
                                </p:column>
</p:selectOneMenu>





public void onPositionSelect()
{
    if(queryCriteria.getPositionForward()!=null)
    {
        OpenPositionQueryCriteria criteria = new OpenPositionQueryCriteria();
        criteria.setPosition(queryCriteria.getPositionForward());
        List<OpenPosition> openPositions = openPositionService.searchOpenPosition(criteria);
        setOpenPositionList(openPositions);
    }
    else
    {
        List<OpenPosition> positions = openPositionService.getActiveOpenPositionList();
        setOpenPositionList(positions);
    }
}

【问题讨论】:

  • 尝试用&lt;f:selectItem itemLabel="#{menu['onemenu.choose']}" noSelectionOption="true" /&gt;替换&lt;f:selectItem itemLabel="#{menu['onemenu.choose']}" itemValue="#{null}"/&gt;
  • 很遗憾它没有用@MathieuCastets

标签: ajax events primefaces selectonemenu


【解决方案1】:

如果您使用itemValue="#{null}" 或itemValue="",则永远不会调用 valueChangeListener 方法。

如果你想让你的第一个项目为空,这是一个更好的方法:

        <f:selectItem
            itemDisabled="true"
            itemLabel="#{null}"
            itemValue="#{null}" /> 

【讨论】:

    【解决方案2】:

    我遇到了同样的问题。 选择默认值不会触发更改事件。为什么会这样,我无法理解。这样的事情通常很正常。 我没有找到任何真正的解决方案。 您应该尝试为此编写自定义验证器和转换器。 尝试这个: Using a "Please select" f:selectItem with null/empty value inside a p:selectOneMenu

    好的,我终于找到了解决办法!

    您需要将 immediate="true" 添加到 ajax 调用。 添加立即告诉 ajax 忽略任何潜在的验证错误并调用 onChange。 试试看。

    【讨论】:

      【解决方案3】:

      我遇到了同样的问题,所以我把 selectItem 放在没有属性 itemValue 这样的地方:

      <f:selectItem itemLabel="#{menu['onemenu.choose']}" />
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-04-22
        • 1970-01-01
        • 1970-01-01
        • 2014-09-03
        • 2012-12-21
        • 2015-01-09
        • 1970-01-01
        相关资源
        最近更新 更多