首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SelectOneMenu更新其他SelectOneMenu

SelectOneMenu更新其他SelectOneMenu
EN

Stack Overflow用户
提问于 2012-09-21 23:53:58
回答 2查看 19.3K关注 0票数 6

当我选择第一个SelectOneMenu的任何项时,我想更新第二个SelectOnMenu。就像现在一样,我从ManagedBean中获取SelectOneMenus的值。我想我必须使用AJAX (jquery)向ManagedBean发送参数。

代码语言:javascript
复制
<h:form>
    <div class="center">
        <h:panelGrid id="editTable" columns="2" styleClass="center">
            ...
            <h:outputText value="#{msg.timetable_list_category}" />
            <h:selectOneMenu class="category">
                <f:selectItems value="#{categoryBackingBean.categorys}" var="c"
                    itemLabel="#{c.category_Name}" itemValue="#{c.id}" />
            </h:selectOneMenu>

                <h:outputText value="#{msg.timetable_list_seminarblock}" />
            <h:selectOneMenu class="seminarblock">
                <f:selectItems value="#{seminarblockBackingBean.seminarblocks}" var="s"
                    itemLabel="#{s.seminarblock_Name}" itemValue="#{s.seminarblock_Id}" />
            </h:selectOneMenu>
            ...
        </h:panelGrid>
        ...
    </div>
</h:form>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-22 00:15:06

实际上,您可以使用在selectOneMenu的值发生更改时调用的ValueChangeListener:

代码语言:javascript
复制
<h:selectOneMenu class="category" valueChangeListener="#{yourBean.selectOneMenuListener}">
    <f:selectItems value="#{categoryBackingBean.categorys}" var="c"
        itemLabel="#{c.category_Name}" itemValue="#{c.id}" />
</h:selectOneMenu>

然后,在您的bean中有这个方法:

代码语言:javascript
复制
public void selectOneMenuListener(ValueChangeEvent event) {
    //This will return you the newly selected
    //value as an object. You'll have to cast it.
    Object newValue = event.getNewValue(); 
    //The rest of your processing logic goes here...
}

要更新页面,您可以在<h:selectOneMenu/>中添加onchange="submit()"。对于某些部分呈现,您可以尝试添加此<f:ajax/>而不是onchange="submit()"

代码语言:javascript
复制
<h:selectOneMenu class="category" valueChangeListener="#{yourBean.selectOneMenuListener}">
    <f:selectItems value="#{categoryBackingBean.categorys}" var="c"
        itemLabel="#{c.category_Name}" itemValue="#{c.id}" />
    <f:ajax event="change" execute="@form" render="theIdOfTheComponentYouWantToReRender"/>
</h:selectOneMenu>

如果我没记错的话,您将希望获得在第一个菜单中选择的元素的id,并根据它填充第二个元素。然后,您可以呈现另一个selectOneMenu,如果需要,还可以呈现包装表单一部分的面板。

票数 9
EN

Stack Overflow用户

发布于 2012-09-22 00:01:15

Primefaces有一个你想要实现的很好的特性。它已经在使用Ajax了,所以不用担心自己写代码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12533945

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档