динамически заполнять раскрывающиеся значения с помощью Ajax - PullRequest
1 голос
/ 05 января 2010

У меня есть 3 выпадающих списка. 1-й раскрывающийся список содержит некоторые значения при загрузке страницы. Мне нужно заполнить 2-й выпадающий список в зависимости от значения, выбранного в 1-й выпадающий список. Точно так же мне нужно заполнить 3-й выпадающий список на основе значения, выбранного в 1-й и 2-й выпадающий список.

Первоначально я пытался так.

 <h:selectOneMenu value="#{stu.country}" >
  <f:selectItems value="#{bean.allCountries}" />
  <a4j:support event="onchange"  action="#{bean.retrieveStates(stu.country)}"  
  reRender="states_dropDown"></a4j:support>
   </h:selectOneMenu>

// ly, для второго раскрывающегося списка

    <h:selectOneMenu id="states_dropDown" value="#{stu.state}" >
      <f:selectItems value="#{bean.allStates}" />
    <a4j:support event="onchange"  
     action="#{bean.retrieveCities(stu.country,stu.state)}"  
     reRender="City_dropDown"></a4j:support>
       </h:selectOneMenu>

Иногда этот код работает нормально. Но иногда он не вызывает метод управляемого компонента.

Можете ли вы помочь ?? ?? 1011 *

1 Ответ

1 голос
/ 05 января 2010

Первое, что приходит мне в голову, это то, что вы должны объявить <a4j:support> с immediate="true", чтобы никакие ошибки валидации не помешали бину называться

Кроме того, у меня есть это (хотя оно внутри <rich:comboBox>):

<a4j:support event="onchange" reRender="target"
    limitToList="true" eventsQueue="targetOnchange"
    action="#{bean.action}" ajaxSingle="true"
    requestDelay="500" />

<a4j:support event="onselect" reRender="target" limitToList="true"
    action="#{bean.action}" ajaxSingle="true" />

И все работает отлично. Я использовал 2 события, потому что с rich:comboBox они означают разные вещи. На самом деле, я бы посоветовал использовать comboBox в вашем случае, он будет более удобным для пользователя.

...