繁体   English   中英

嵌套的SelectOneMenu JSF 2.1

[英]nested SelectOneMenu JSF 2.1

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

我需要有2个下拉框(A ad 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。建议将必要的附带

我尝试通过在每个selectOneMenu上调用相同的侦听器而没有嵌套,但是得到了相同的随机行为..ie:当我选择A的元素1保留B上的“上一个”选项时,Box B随机将其选择更新为default,反之亦然!

请指教。

这是无效的语法。 您需要了解JSF会生成HTML代码。 <h:selectOneMenu>生成一个<select><option/></select> 像您尝试的那样,嵌套的<h:selectOneMenu>会生成<select><option/><select><option/></select></select> ,这完全是无效的 HTML(因此,本质上也是完全无效的JSF)。

您对具体的功能要求并不十分清楚,但是我知道您只想在选择父菜单时才显示子菜单? 在这种情况下,请使用rendered属性,并在<f:ajax render>引用它。

这是一个粗略的启动示例,可以在必要时对其进行简化(例如,不需要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>

也可以看看:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM