その記事の一番上の「通知」ブロックで述べたように、それはJSF1.2を対象としています。行の追加は、JSF2.0ビュースコープを使用してはるかに簡単に実現できます。
JSF 1.2の記事に示されている例に基づいて、2つの変更を加える必要があります。
Beanをビュースコープに配置します。
<h:inputHidden>
全体とaddCount
プロパティ、およびその上の参照をすべて削除します。
JSF2.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}" />