6

私の要件はこのようなものです。JSF(2.0) ページに、Address というセクションがあります。「住所を追加」というボタンを追加しました。ユーザーがボタンをクリックすると、新しい住所フィールド (入力テキスト) が動的に生成されます (Line1、Line2、City など)。そして、送信をクリックすると、すべての値 (アドレス 1、アドレス 2 ... アドレス N) が配列リストに送られます。

だから私はする必要があります

  1. ボタンのクリック時に UI コンポーネントを動的に生成する
  2. それらの UI コンポーネントをバッキング Bean にリンクします (できればリストに)
  3. 上記にはデータテーブルを使用しないでください

適切な JSF ドキュメントをオンラインで見つけるのは非常に難しいため、誰かが私を助けてくれれば、それは素晴らしいことです

更新: 誰も投稿した回答はうまくいきませんが、Java コントローラー (Java Bean、HtmlPanelGrid コンポーネントを使用) から動的 UI コンポーネントを作成するなど、より堅牢なものが必要です。htmlPanelGrid を使用してコンポーネントを動的に作成できましたが、生成されたコンポーネントを Bean のアドレス リスト (すべてのアドレスの詳細を格納するもの) にバインドする方法が見つかりません。

4

1 に答える 1

5

アドレスのクラスAddressがあるとします。そして、アドレスを保持するための aAddressBean付きList

コードは次のようになります (私が考えることができる最も基本的なシナリオの場合)。

<h:form id="addressForm">
    <h:commandButton value="Add Address" action="#{addressBean.addAddress()}" immediate="true" execute="@this">
        <f:ajax render="addressForm" />
    </h:commandButton>
    <c:forEach items="#{addressBean.addressList}" var="address">
        <h:inputText value="#{address.street}" /><br />
    </c:forEach>
    <h:commandButton value="Save" action="#{addressBean.persistAddresses}" />
</h:form>

@ManagedBean
@ViewScoped
public class AddressBean {
    private List<Address> addressList = new ArrayList<Address>(); // getter+setter

    public void addAddress() {
        addressList.add(new Address());
    }

    public void persistAddresses() {
        // store the addressList filled with addresses
    }
}

public class Address {
    private String address; // getter+setter
}

<c:forEach>JSTL から取得されます。で動作する可能性<ui:repeat>がありますが、実際のシナリオによっては動作しない場合があります。

于 2013-09-05T06:23:47.223 に答える