【问题标题】:Multiple h:selectOneMenu loaded with f:ajax多个 h:selectOneMenu 加载了 f:ajax
【发布时间】:2013-06-24 13:47:28
【问题描述】:

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

在调试并尝试解决此问题后,我看到最后一个方法是使用空值调用的,我猜这是因为 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>

【问题讨论】:

    标签: ajax jsf selectonemenu


    【解决方案1】:

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

    另见:

    【讨论】:

    • 我也已经考虑过这一点,但我正在使用 CDI Beans。可以使用两种不同的豆子吗?一个将保存来自选择的数据,另一个将通过 AJAX 调用发出数据请求。
    • 然后使用 CDI 替代 JSF 视图范围。另见例如stackoverflow.com/questions/14158885/… 重点是,您的 bean 只是在错误的范围内,您只需将其放在正确的范围内。它应该能活到你需要的时间。
    • 这也是我尝试的另一个想法。非常感谢!这很有帮助:)
    猜你喜欢
    • 2023-04-05
    • 2015-08-02
    • 1970-01-01
    • 1970-01-01
    • 2011-08-30
    • 1970-01-01
    • 1970-01-01
    • 2012-07-15
    • 2016-02-10
    相关资源
    最近更新 更多