6

当我选择第一个 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>
4

2 回答 2

9

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

<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,或者,如果需要,可以渲染一个包含表单一部分的面板。

于 2012-09-21T16:15:05.547 回答
0

Primefaces具有您想要实现的功能。它已经在使用 Ajax,所以不必担心自己编写代码。

于 2012-09-21T16:01:14.940 回答