2

この一般的な問題をどのように解決しますか?いくつかの Ajax イベント (フォーム全体ではなく) に応じていくつかのフォーム要素をレンダリングする必要があり、フォームのレイアウトを壊したくないとしましょう。ここにサンプルコードがあります

<h:form>
    <h:panelGrid columns="2">
        text1
        <h:inputText value="asasd" />
        text2
        <h:inputText value="asdasd" />
        <p:selectBooleanCheckbox value="#{bean.myBoolean}">
            <p:ajax update="someId" listener="{bean.changeValueOfMyBoolean"} />
        </p:selectBooleanCheckbox>
        <h:outputText value="asdas"rendered="#{bean.myBoolean}" />
        <h:inputText value="bean value" rendered="#{bean.myBoolean"} />
        ...few more some elements

したがって、2つのオプションしか表示されず、<h:panelGroup>それらすべてに1つのIDを与え、内部に別のIDを作成します<h:panelGrid>(新しくレンダリングされた要素のインデントが異なるため、フォームレイアウトが壊れます)、または各要素に異なるIDを持つ独自のpaneGroupを与えます。<p:ajax>このようなものを使用しますupdate=id1, id2, ...が、それも良い解決策のようには思えません。

それで、あなたのアプローチは何ですか、より良い方法はありますか?

4

1 に答える 1

1

更新で更新したいすべてのIDを指定するか、

次のような共通点を持つすべての関連コンポーネント id を指定できます。

inputText1、inputText2、inputText3 など

マネージド Bean には、これらすべての要素の ID を返す 1 つの変数があります。

ajax イベントで、値を設定します (正規表現を使用して、ビュー内のすべての ID を取得できます)。

しかし、これはサーバーへの旅行が必要なため、代わりにIDを更新するためのラウンドアバウトだと思います。

于 2012-04-28T16:00:31.260 に答える