正如那篇文章顶部的“通知”块中所提到的,它是针对 JSF 1.2 的。使用 JSF 2.0 视图范围可以更轻松地添加一行。
根据 JSF 1.2 文章中给出的示例,您只需进行 2 处更改:
将 bean 放在视图范围内。
删除整个<h:inputHidden>
和addCount
属性及其上的任何引用。
这是 JSF 2.0 风格的启动示例:
@ManagedBean
@ViewScoped
public class Bean {
private List<Item> items;
@EJB
private ItemService service; // Or just DAO. Whatever you want.
@PostConstruct
public void init() {
items = service.list();
}
public void add() {
items.add(new Item());
}
public void save() {
service.save(items);
}
public List<Item> getItems() {
return items;
}
}
和观点:
<h:dataTable value="#{bean.items}" var="item">
<h:column>
<h:outputText value="#{item.id}" rendered="#{item.id != null}" />
<h:outputText value="new" rendered="#{item.id == null}" />
</h:column>
<h:column>
<h:outputText value="#{item.name}" rendered="#{item.id != null}" />
<h:inputText value="#{item.name}" rendered="#{item.id == null}" />
</h:column>
<h:column>
<h:outputText value="#{item.value}" rendered="#{item.id != null}" />
<h:inputText value="#{item.value}" rendered="#{item.id == null}" />
</h:column>
</h:dataTable>
<h:commandButton value="Add" action="#{bean.add}" />
<h:commandButton value="Save" action="#{bean.save}" />