2015-07-07 2 views
2

У меня есть selectonemenu, который включает в себя некоторые элементы. И нулевой элемент для показа «пожалуйста, выберите один». Моя цель - запросить некоторые данные при выборе одного из них. И если я выберу «пожалуйста, выберите один», сделайте еще одну вещь.primefaces selectonemenu change event не работает для нулевого значения

Но в конечном итоге событие изменения запускается для нормальных значений, но если я выберем пункт «пожалуйста, выберите один», он не будет запущен. Спасибо за вашу помощь. Вот мой код.

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

Попробуйте заменить '<е: SelectItem itemLabel = "# {меню [ 'onemenu.choose']}" ItemValue =" # {нуль } "/>' by '' –

+0

грустно это не работает @MathieuCastets –

+0

[stackoverflow.com/a/24321980 /1391249](http://stackoverflow.com/a/24321980/1391249) – jjd

ответ

-1

У меня была та же проблема. Изменение события НЕ УДАЛЯЕТСЯ, выбрав значение по умолчанию. Почему это так далеко от меня. Обычно такие вещи нормальные. Я не нашел реального решения. Вы должны попытаться написать для этого специальный валидатор и конвертер. Попробуйте следующее: Using a "Please select" f:selectItem with null/empty value inside a p:selectOneMenu

ОК, я, наконец, нашел решение этого!

Вам нужно добавить немедленное = "true" в ajax-вызов. Добавление немедленно сообщает ajax игнорировать любые возможные ошибки проверки и в любом случае вызывать onChange. Попробуйте.

0

Если вы используете itemValue="#{null}" или itemValue="", метод valueChangeListener никогда не будет называться.

Это лучший подход, если вы хотите, чтобы ваш первый нуль пункт:

 <f:selectItem 
      itemDisabled="true" 
      itemLabel="#{null}" 
      itemValue="#{null}" /> 
Смежные вопросы