多个h:selectOneMenu加载f:ajax

时间:2013-06-24 13:47:29

标签: ajax jsf selectonemenu

我正在尝试构建一个具有三种不同选择的接口,第一个选择将呈现第二个,第二个选择将加载数据,在用户从第二个选择中选择一个选项后,这将呈现第三个加载其数据,等待用户选择最终选项。

在调试并尝试解决这个问题后,我看到最后一个方法是使用空值调用的,我想这是因为bean是请求范围的,并且在AJAX请求被销毁之后。如果不多次调用数据库并使用非会话范围的bean,我怎么能解决这个问题?

<h:selectOneMenu value="#{RequestBean.firstSelectValue}" id="first">
  <f:selectItem id="default" itemLabel="Select one" itemValue="-1" />
  <f:selectItems value="#{RequestBean.firstSelectElements}" 
                 var="var" itemLabel="#{var.label}"
                 itemValue="#{var.value}" />
  <f:ajax event="change" render="second" onevent="selectListener"/>
</h:selectOneMenu>

<h:selectOneMenu value="#{RequestBean.secondSelectValue}" id="second">
  <f:selectItem id="default" itemLabel="Select one" itemValue="-1" />
  <f:selectItems value="#{RequestBean.secondSelectElements}" 
                 var="var" itemLabel="#{var.label}"
                 itemValue="#{var.value}" />
  <f:ajax event="change" render="third" onevent="selectListener/>
</h:selectOneMenu>

<h:selectOneMenu value="#{RequestBean.third SelectValue}" id="third">
  <f:ajax event="change" render="someTextArea" onevent="selectListener" />
  <f:selectItem id="default" itemLabel="Select one" itemValue="-1" />
  <f:selectItems value="#{RequestBean.getThirdSelectElements(RequestBean.secondSelectValue)}" 
                 var="var" itemLabel="#{var.label}"
                 itemValue="#{var.value}" />
</h:selectOneMenu>

1 个答案:

答案 0 :(得分:1)

将bean放在视图范围内。只要你通过ajax与同一个视图进行交互,它就会存在。

另见: