使用Ajax动态填充下拉值

时间:2010-01-05 08:56:04

标签: ajax jsf richfaces

我有3个下拉菜单。第一个下拉列表包含页面加载时的一些值。 我需要根据第一个下拉列表中选择的值填充第二个下拉列表。 同样,我需要根据在第一个和第二个下拉列表中选择的值填充第三个下拉列表。

最初我尝试过这样。

 <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,for 2nd drop-down

    <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方法。

你能帮忙吗?

1 个答案:

答案 0 :(得分:1)

我想到的第一个是你应该用<a4j:support>声明immediate="true",这样就不会有任何验证错误阻止bean被调用

另外,我有这个(虽然它在<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,它将更加用户友好。