1

最初の選択で2番目の選択がレンダリングされ、この2番目の選択でデータがロードされ、ユーザーが2番目の選択からオプションを選択した後、データをロードする3番目の選択がレンダリングされるように、3つの異なる選択でインターフェイスを構築しようとしていますユーザーが最後のオプションを選択するのを待っています。

この問題をデバッグして解決しようとした後、空の値を使用して最後のメソッドが呼び出されていることがわかりました。これは、Bean がリクエスト スコープであり、AJAX リクエストが破棄された後であるためだと思います。DB を何度も呼び出したり、非セッション スコープの 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>
4

1 に答える 1

1

Bean をビュー スコープに入れるだけです。ajax で同じビューを操作している限り有効です。

以下も参照してください。

于 2013-06-24T13:48:56.180 に答える