私は、この場合の解決策を見つけたと思います。私が何をしたか
は、行の値を変更することができるの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"を押す前に同じ列を数回修正すると、リストは同じ行で育ってしまいます。しかし、マージメソッドは最後の "バージョン"の列を使用します。私たちのニーズのため、それは大丈夫です。
前回のお返事ありがとうございます。
もっと良い方法がわかっていたり、コーナーケースが見つかった場合は、お知らせください。
行編集では、実際のデータが変更されているかどうかはわかりません。 – Kukeltje