使用Ajax动态填充下拉列表值

使用Ajax动态填充下拉列表值,ajax,jsf,richfaces,Ajax,Jsf,Richfaces,我有3个下拉列表。第一个下拉列表包含页面加载时的一些值。 我需要根据在第一个下拉列表中选择的值填充第二个下拉列表。 类似地,我需要根据在第一个和第二个下拉列表中选择的值填充第三个下拉列表 起初我是这样尝试的 <h:selectOneMenu value="#{stu.country}" > <f:selectItems value="#{bean.allCountries}" /> <a4j:support event="onchange" action

我有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,用于第二个下拉列表

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


你能帮忙吗?

我想到的第一个问题是,你应该用
immediate=“true”
声明
,这样就不会有验证错误阻止bean被调用

另外,我还有一个(它在
中):



而且效果很好。我使用了这两个事件,因为对于
rich:comboBox
,它们的含义不同。事实上,我建议在您的情况下使用组合框,它将更加用户友好。

我首先想到的是,您应该使用
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" />