如何dynamic添加JSF组件

我可以dynamic添加JSF组件吗? 我需要有一个button,应该添加一个<h:inputText>到窗体的forms。 这可能吗?

我知道这应该是可能的JavaScript在某种程度上。 有谁知道如何在JSF中做到这一点? 我认为主要的问题是如何通过#{value}获取或设置新input的#{value}

使用像<h:dataTable><ui:repeat>这样的迭代组件显示dynamic大小的实体List 。 使bean @ViewScoped确保列表在同一个视图的回传中被记住,而不是一遍又一遍的重新创build。

<h:dataTable>开启的例子:

 <h:form> <h:dataTable value="#{bean.items}" var="item"> <h:column><h:inputText value="#{item.value}" /></h:column> <h:column><h:commandButton value="remove" action="#{bean.remove(item)}" /></h:column> </h:dataTable> <h:commandButton value="add" action="#{bean.add}" /> <h:commandButton value="save" action="#{bean.save}" /> </h:form> 

托pipebean:

 @ManagedBean @ViewScoped public class Bean { private List<Item> items; @PostConstruct public void init() { items = new ArrayList<Item>(); } public void add() { items.add(new Item()); } public void remove(Item item) { items.remove(item); } public void save() { System.out.println("items: " + items); } public List<Item> getItems() { return items; } } 

模型:

 public class Item { private String value; public String getValue() { return value; } public void setValue(String value) { this.value = value; } public String toString() { return String.format("Item[value=%s]", value); } } 

也可以看看:

  • 推荐的JSF 2.0 CRUD框架
  • 如何创builddynamic的JSF表单域
  • 如何使用JSF 2.0复合组件实现dynamic列表?
  • 如何select合适的bean范围?

这应该是这样的

绑定一个表单标签到bean属性

 <form binding="#{myBean.myform}">...</form> 
 @ManagedBean("myBean") public class Bean{ property HtmlForm myform; } 

在事件上,创buildinput组件的新实例

 HtmlInputText input=new HtmlInputText(); 

并附上您的表格

 myform.getChildren().add(input); 

使用h:dataTabledynamic添加元素…有一个你想为dataTable提供值的任何types的列表…

h:dataTable ,您可以包含要在<h:column>内部创build的元素标记

它将用于生成要dynamic创build的元素。