PrimeFaces的SelectOneMenu更改事件在空值情况下无法工作

4

我有一个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);
    }
}

尝试将<f:selectItem itemLabel="#{menu['onemenu.choose']}" itemValue="#{null}"/>替换为<f:selectItem itemLabel="#{menu['onemenu.choose']}" noSelectionOption="true" /> - Mathieu Castets
很遗憾,它没有起作用 @MathieuCastets - Mesut Can
3个回答

3
如果您使用itemValue="#{null}"itemValue="",那么valueChangeListener方法将永远不会被调用。
如果您想让第一个项目为空,那么这是更好的方法:
        <f:selectItem
            itemDisabled="true"
            itemLabel="#{null}"
            itemValue="#{null}" /> 

1
我遇到了同样的问题。选择默认值不会触发更改事件,为什么我不知道。通常这样的事情很正常。我没有找到任何真正的解决方案。您应该尝试编写自定义验证器和转换器来解决此问题。尝试这个:在p:selectOneMenu中使用“请选择”f:selectItem与null/empty值
好的,我最终找到了解决方法!你需要在ajax调用中添加immediate="true"。添加immediate告诉ajax忽略任何潜在的验证错误并调用onChange。试试看。


0

我遇到了同样的问题,所以我将selectItem放置在没有属性itemValue的情况下,就像这样:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接