primefaces selectonemenu change event not working for null value

主宰稳场 提交于 2019-12-14 01:13:49

问题


I have a selectonemenu that includes some items. And a null item for showing "please choose one".. MY goal is to query some data when I select one of them. And if i select the "please choose one" do another thing.

But eventually, the change event is fired for normal values but if I select "please choose one" item , it is not fired. Thanks for your help. Here is my code.

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

回答1:


If you use itemValue="#{null}" or itemValue="", the valueChangeListener method never will be called.

That's a better approach if you want your first item null:

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



回答2:


I had the same problem. Change event WON'T be fired by selecting default value. Why that is so is beyond me. Such things are normal usually. I didn't find any real solution. You should try to write custom validator and converter for this. Try this: Using a "Please select" f:selectItem with null/empty value inside a p:selectOneMenu

OK, I finally found the solution to this!

you need to add immediate="true" to ajax call. Adding immediate tells ajax to ignore any potential validation errors and call the onChange anyway. Try it.




回答3:


I was with the same issue so I put the selectItem without the propertie itemValue like that:

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


来源:https://stackoverflow.com/questions/31279696/primefaces-selectonemenu-change-event-not-working-for-null-value

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!