2

numberOfGuests整数値を取るというフィールドがあります。p:inputTextページを送信するときに、値と同じ数のフィールドを次のページにnumberOfGuests動的に挿入したいと考えています。ui:repeatコレクションを反復処理することしかできません。どうすればそれができるか知りたいです。

ありがとう。

4

1 に答える 1

5

size のコレクション (または、より簡単には配列) を作成するだけnumberOfGuestsです。

たとえば、ビュー スコープ Bean では次のようになります。

private Integer numberOfGuests; // +getter+setter
private String[] guests; // +getter

public void submit() {
    guests = new String[numberOfGuests];
}

<h:form>
    <p:inputText value="#{bean.numberOfGuests}" />
    <p:commandButton value="submit" action="#{bean.submit}" update=":guests" />
</h:form>

<h:panelGroup id="guests">
    <h:form rendered="#{not empty bean.guests}">
        <ui:repeat value="#{bean.guests}" varStatus="loop">
            <p:inputText value="#{bean.guests[loop.index]}" />
        </ui:repeat>
        <p:commandButton value="save" action="#{bean.save}" />
    </h:form>
</h:panelGroup>

結果は同じビューに表示されるだけで、ビュー スコープの Bean インスタンスが維持され、入力フィールドは、この例のvarようStringにインデックスではなくインデックスによって値を参照しているため、不変です。のような複雑なオブジェクトの場合はGuest、「通常の」方法でバインドするだけvalue="#{guest.name}"です。

于 2013-09-28T11:30:40.640 に答える