【问题标题】:nested SelectOneMenu JSF 2.1嵌套的 SelectOneMenu JSF 2.1
【发布时间】:2013-01-13 03:13:47
【问题描述】:

我正在使用 JSf2.1 开发一个 Web 应用程序。 我正在按照教程编写一个 selectOneMenu(下拉列表框)。

我需要有 2 个下拉框(A 和 B),但本质上调用相同的 ajax 侦听器函数,该函数将使用选项 A 和 B 进行一些计算...

那么,我们可以像这样嵌套 selectOneMenu 吗?

<h:form id= "ourForm">
    <h:selectOneMenu value= "#{bean.valA}"...>
       <f:selectItems ... />
        <h:selectOneMenu value= "#{bean.valB}"...>
             <f:selectItems ... />
             <f:ajax listener="#{bean.listener}" render="ourForm"/>
        </h:selectOneMenu>
    </h:selectOneMenu>
</h:form>

还有bean监听方法:

public void Listener{

//use valA and valB


}

好吧,我尝试执行上述操作,但页面显示警告:

表单组件需要在其祖先中有一个 UIForm。建议附上必要的 withing

我通过在每个 selectOneMenu 上调用相同的侦听器尝试不使用嵌套,但我得到相同的随机行为..即:当我选择 A 的 elem 1 保留 B 上的“prev”选项时,框 B 随机更新其选择为默认值反之亦然!

请指教。

【问题讨论】:

    标签: ajax jsf-2 selectonemenu


    【解决方案1】:

    这是无效的语法。您需要了解 JSF 生成 HTML 代码。 &lt;h:selectOneMenu&gt; 生成 &lt;select&gt;&lt;option/&gt;&lt;/select&gt;。在您的尝试中嵌套的&lt;h:selectOneMenu&gt; 将生成&lt;select&gt;&lt;option/&gt;&lt;select&gt;&lt;option/&gt;&lt;/select&gt;&lt;/select&gt;,它完全是invalid HTML(因此本质上也是完全无效的JSF)。

    您对具体的功能要求不是很清楚,但我知道您只想在父菜单的某些选择上显示子菜单?在这种情况下,请使用rendered 属性并在&lt;f:ajax render&gt; 中引用它。

    这是一个粗略的启动示例,如有必要,可以更加简化(例如,不需要 renderMenuB 属性,具体取决于您没有说明的具体功能要求)。

    <h:selectOneMenu value="#{bean.selectedValueA}">
        <f:selectItems value="#{bean.availableValuesA}" />
        <f:ajax listener="#{bean.handleChangeA}" render="menuB" />
    </h:selectOneMenu>
    <h:panelGroup id="menuB">
        <h:selectOneMenu value="#{bean.selectedValueB}" rendered="#{bean.renderMenuB}">
            <f:selectItems value="#{bean.availableValuesB}" />
            <f:ajax listener="#{bean.handleChangeB}" render="ourForm" />
        </h:selectOneMenu>
    </h:panelGroup>
    

    另见:

    【讨论】:

      猜你喜欢
      • 2013-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-22
      • 2012-11-02
      • 1970-01-01
      • 2012-06-12
      相关资源
      最近更新 更多