6

最初の SelectOnMenu の項目を選択したときに、2 番目の SelectOneMenu を更新したいと考えています。現在は、SelectOneMenus の値を ManagedBean から取得しています。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 を取得し、それに応じて 2 番目のメニューに入力する必要があります。次に、他の selectOneMenu をレンダリングするか、必要に応じてフォームの一部をラップするパネルをレンダリングできます。

于 2012-09-21T16:15:05.547 に答える
0

Primefacesには、あなたが達成しようとしていることの優れた機能があります。すでに Ajax を使用しているため、自分でコードを書くことを心配する必要はありません。

于 2012-09-21T16:01:14.940 に答える