0

BalusC のusing-databatablesを読み、リクエスト スコープを使用して行を追加するサンプルを試しましたが、

<h:inputHidden binding="#{myBean.dataItemId}" />

マイページのすべてのボタンが機能しなくなります。最初は、問題はコンバーターにあると思いました

<h:inputHidden binding="#{myBean.dataItemId}" converter="javax.faces.Integer"/>

しかし、コンバーターがなくても同じ問題があります

2番目に興味深いのは、サンプルコードから、データテーブルに新しい行を追加するときにテーブルが追加された行を前に取得する方法を理解していなかったことです

ArrayListたとえば、最初の行を追加し、追加中に 2 番目の行にデータを配置すると、最初の行が削除されると思われる場所に add 関数が新しいものを作成することに気付きました

4

1 に答える 1

2

その記事の一番上の「通知」ブロックで述べたように、それはJSF1.2を対象としています。行の追加は、JSF2.0ビュースコープを使用してはるかに簡単に実現できます。

JSF 1.2の記事に示されている例に基づいて、2つの変更を加える必要があります。

  1. Beanをビュースコープに配置します。

  2. <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}" />
于 2012-12-26T21:31:41.337 に答える