2

2 つの列を持つパネル グリッドがあります。最初の列にはラベルが含まれ、2 番目にはコンポーネントが含まれています。リスナー backingBean.onFunktionChange は、backingBean.functionGraduand の値を true に設定します。したがって、この場合、学位のラベルとメニューがレンダリングされます。

問題は、最初に都市のメニューで都市を選択してから、「関数」メニューの値を変更すると、パネル全体が更新され、都市メニューがリセットされることです。ただし、機能変更の場合は、事前に選択された都市を維持したいと考えています。

関数と度のラベルとコンポーネントを id=panelFunction の panelGroup でラップすると、このパネルのみを更新して、2 列のレイアウトを破棄します。

panelGrid のレイアウトに影響を与えずに panelGrid の一部のみを更新する可能性はありますか?

    <h:panelGrid columns="2" id="panel">

   <label>#{function}</label>
        <p:selectOneMenu id="menuFunction" value="#{...}" >
            <p:ajax event="change" process="menuFunction"
                update="panel"
                listener="#{backingBean.onFunctionChange}" />
            <f:selectItems .../>
        </p:selectOneMenu>


        <h:outputLabel id="labelDegree" for="menuDegree"
            value="#{msgs.degree}"
            rendered="#{backingBean.functionGraduand}" />
        <p:selectOneMenu id="menuDegree" value="#{...}" rendered="#{backingBean.functionGraduand}">
            <f:selectItems .../>
        </p:selectOneMenu>


        <label class="required">#{msgs.city}</label>
        <p:selectOneMenu value="#{...}" id ="city">
            <f:selectItems .../>
        </p:selectOneMenu>

    </h:panelGrid>
4

1 に答える 1

3

ajaxリクエストでパネル全体を処理することでこれを解決しました:

...

<p:ajax event="change" process="panel"
                update="panel"
                listener="#{backingBean.onFunctionChange}" />

...

于 2012-06-04T11:52:37.673 に答える