2010-01-05 2 views
1

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

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

<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, для 2-го раскрывающихся

<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> 

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

Не могли бы вы помочь?

+0

Вы решили проблему? Дайте некоторую обратную связь. – Bozho

+0

http://www.javatutorials.co.in/jsf-2-2-ajax-dynamic-drop-menu-list-example/ Я думаю, что это может решить вашу проблему. –

ответ

1

Первое, что приходит в голову, что вы должны объявить <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 в вашем случае, это будет более удобным для пользователя.