在JSF 2.0中动态创建输入字段并将其链接到辅助bean

Bha*_*kar 6 jsf jsf-2

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

所以我需要

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

在线找到合适的JSF文档非常困难,所以如果有人能帮助我,那就太棒了

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

noo*_*one 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>
Run Code Online (Sandbox Code Playgroud)
@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
    }
}
Run Code Online (Sandbox Code Playgroud)
public class Address {
    private String address; // getter+setter
}
Run Code Online (Sandbox Code Playgroud)

<c:forEach>取自JSTL.它可能会起作用<ui:repeat>,但根据您的实际情况,它可能不会.