2016-04-06 16 views
0

ここにガイドが必要です。 私はdbからいくつかのレコードを取得しているとしましょう。これらのレコードでデータテーブルを作成しています。ビュー内でインスタンスエンティティが変更されているかどうかを確認するにはどうすればよいですか?

データテーブルは、列が入力であるため、レコードの値を変更できます。

<p:dataTable value="#{videogames.videogameList}" var="vg" > 
     <p:column headerText="Name"> 
      <p:inputText value="#{vg.name}" /> 
     </p:column> 
</p:dataTable> 

データベースの値を更新するために一部の行が変更されているかどうかを確認するにはどうすればよいですか?

リストの各要素をチェックして、元の値を持つ一時的なarraylistと比較する必要がありますか?これを行うためのよりエレガントな方法がありますか?

このすべてを学ぶのに役立つチュートリアルやドキュメントがありますか。

ありがとうございます!

私は、Java、JSF、primafaces、およびJPAで作業しています。

答えて

0

私は、この場合の解決策を見つけたと思います。私が何をしたか

は、行の値を変更することができるのinputTextに、イベント=「変更」でAJAXリスナーを追加することでしたので、毎回値が変更されると、リスナーはPARAMとして行を渡しますこの方法には、この方法は、リストに行を追加します:

videogames.xhtml

<p:column headerText="Nombre"> 
     <p:inputText value="#{vj.nombre}"> 
      <!--this is the added listener--> 
      **<f:ajax event="change" listener="#{videojuegos.rowSelectedTest(vj)}" />** 
     </p:inputText> 
    </p:column> 

    <!-- **Button that calls the method for updating the modify entities columns**--> 
    <p:commandButton value="Actualizar" actionListener="#{videojuegos.updateVideojuego()}"/> 

マネージドBeanがそれを受信して​​、リストに追加します:

VideoGamesManagedBean。リストをjavaの

List <Videojuego> videojuegoUpdate = new ArrayList<Videojuego>(); 
//adds the modify row to a list 
public void rowSelectedTest(Videojuego videojuego){ 
    videojuegoUpdate.add(videojuego); 
} 

//calls the method in the EJB for merging each object in the list 
public void updateVideojuego(){ 

    if(videojuegoUpdate != null && !videojuegoUpdate.isEmpty()){ 
     vjbean.mergeVideojuegoList(videojuegoUpdate); 
     //after merging, cleans up the arraylist. 
     videojuegoUpdate.clear(); 
    } 
} 

と最後の、EJBの反復処理し、それぞれが

VideoGameBean.java

@PersistenceContext 
private EntityManager em; 

public void mergeVideojuegoList(List<Videojuego> listVideojuegoUpdate){ 
    for(Videojuego vjUpdate : listVideojuegoUpdate){ 
     em.merge(vjUpdate); 
    } 

}

注オブジェクトをマージ:

それだけの "問題"私がコマンドボタン "Actualizar"を押す前に同じ列を数回修正すると、リストは同じ行で育ってしまいます。しかし、マージメソッドは最後の "バージョン"の列を使用します。私たちのニーズのため、それは大丈夫です。

前回のお返事ありがとうございます。

もっと良い方法がわかっていたり、コーナーケースが見つかった場合は、お知らせください。

0

私はコメントとして投稿することができますが、私はそれのための担当者が不足しています。私はそれが答えとして役立つことを願っています(あなたがそれを学ぶための情報源を求めてきたので)。

私もPrimeFacesで作業しますが、個人的にはまだ編集可能な行を扱っていません。あなたが望むものは、RowEditEventで行えるはずです。

PrimeFacesショーケースは、それ自体のチュートリアルの一種です。 XHTMLとの.java例を挙げて

http://www.primefaces.org/showcase/ui/data/datatable/edit.xhtml

移動します。ここでは、編集可能なDataTableのためのリンクです。それは正しい方向にあなたをブートストラップするはずです。

PrimeFacesのドキュメントでは、同様の情報の偉大な源である:

http://www.primefaces.org/docs/guide/primefaces_user_guide_5_3.pdf

+0

行編集では、実際のデータが変更されているかどうかはわかりません。 – Kukeltje

0

お手伝いをする必要がありますrowEditと呼ばれるAjaxのイベントがあります。ユーザーがいつ編集を中止するかを検出する補完イベントはrowEditCancelです。

primefacesのWebサイトには、データテーブルとそれ以外のフレームワークのかなりの詳細情報が含まれています。これは、最新バージョン5.3へのリンクです。

primefaces 5.3 users guide

+0

行編集では、実際のデータが変更されたかどうかはわかりません。 – Kukeltje

関連する問題