primefaces selectonemenu更改事件不适用于null值

时间:2015-07-07 21:33:47

标签: ajax events primefaces selectonemenu

我有一个包含一些项目的selectonemenu。并显示一个空项目"请选择一个" .. 我的目标是在选择其中一个数据时查询一些数据。如果我选择"请选择一个"做另一件事。

但最终,更改事件会针对正常值触发,但如果我选择"请选择一个"项目,它没有被解雇。谢谢你的帮助。这是我的代码。

<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);
    }
}

3 个答案:

答案 0 :(得分:1)

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

如果您希望第一个项目为null,那么这是一种更好的方法:

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:-1)

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

好的,我终于找到了解决方案!

你需要添加立即=&#34;真&#34;到ajax电话。 添加立即告诉ajax忽略任何潜在的验证错误并且无论如何都要调用onChange。 试试吧。