如何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:dataTable
dynamic添加元素…有一个你想为dataTable提供值的任何types的列表…
在h:dataTable
,您可以包含要在<h:column>
内部创build的元素标记
它将用于生成要dynamic创build的元素。