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