6

我的要求是这样的。在 JSF(2.0) 页面中,我有一个名为 Address 的部分。我添加了一个按钮,上面写着“添加地址”。当用户单击按钮时,应动态生成新的地址字段(输入文本)(Line1、Line2、City 等)。当我单击提交时,所有值(地址 1、地址 2 ... 地址 N)都应该进入一个数组列表。

所以我需要

  1. 单击按钮动态生成 UI 组件
  2. 将这些 UI 组件链接到支持 bean(最好是列表)
  3. 数据表应用于上述

很难在网上找到合适的 JSF 文档,所以如果有人可以帮助我,那就太好了

更新:noone 发布的答案效果很好,但我想要更健壮的东西,比如从 Java 控制器创建动态 UI 组件(Java bean,使用 HtmlPanelGrid 组件)。我已经能够使用 htmlPanelGrid 动态创建组件,但是我找不到将这些生成的组件绑定到 bean 中的地址列表的方法(存储所有地址详细信息的那个)

4

1 回答 1

5

我假设你有一个Address地址类。和一个AddressBean用一个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 回答