SelectOneMenu更新其他SelectOneMenu

发布于 2021-01-30 17:37:42

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

<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>
关注者
0
被浏览
50
1 个回答
  • 面试哥
    面试哥 2021-01-30
    为面试而生,有面试问题,就找面试哥。

    实际上,您可以使用ValueChangeListener,当selectOneMenu的值更改时将调用它:

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

    然后,在您的bean中,您可以使用以下方法:

    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...
    }
    

    要更新页面,您可以将其添加onchange="submit()"到中<h:selectOneMenu/>。对于部分渲染,您可以尝试添加以下内容<f:ajax/>而不是onchange="submit()"

    <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,或者如果需要的话,呈现包装表单一部分的面板。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看