hi, i have a problem with my DataTable, when i change the value and try to get it i have the same value before change. Help PLZ i'm with this problem for 8 days.
this is my page xhtml
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui">
<f:view contentType="text/html">
<h:head>
<f:facet name="first">
<meta content='text/html; charset=UTF-8' http-equiv="Content-Type"/>
<title>PrimeFaces</title>
</f:facet>
</h:head>
<h:body>
<center> <h3> Interventions Préventives </h3> </center>
<h:form id="form">
<p:contextMenu for="cars2" widgetVar="cMenu">
<p:menuitem value="Edit Cell" icon="ui-icon-search" onclick="PF('cellCars').showCellEditor();return false;"/>
<p:menuitem value="Hide Menu" icon="ui-icon-close" onclick="PF('cMenu').hide()"/>
</p:contextMenu>
<p:growl id="msgs" showDetail="true"/>
<p:dataTable id="cars2" var="item" value="#{monTest.personnes}" editable="true" editMode="cell" widgetVar="cellCars">
<f:facet name="header"> Cell Editing with Click and RightClick
</f:facet>
<p:ajax event="cellEdit" listener="#{monTest.onCellEdit}" update=":form:msgs" />
<p:column headerText="Id">
<p:cellEditor>
<f:facet name="output"><h:outputText value="#{item.id}" /></f:facet>
<f:facet name="input"><p:inputText id="modelInput" value="#{item.id}" style="width:96%"/></f:facet>
</p:cellEditor>
</p:column>
<p:column headerText="Year">
<p:cellEditor>
<f:facet name="output"><h:outputText value="#{item.nom}" /></f:facet>
<f:facet name="input"><p:inputText value="#{item.nom}" style="width:96%" label="Year"/></f:facet>
</p:cellEditor>
</p:column>
</p:dataTable>
</h:form>
</h:body>
</f:view>
</html>
this is my MAnagedBean
package ManagedBeans;
import entities.Personne;
import javax.inject.Named;
import javax.enterprise.context.SessionScoped;
import java.io.Serializable;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import org.primefaces.event.CellEditEvent;
import session.PersonneFacadeLocal;
@Named(value = "monTest")
@SessionScoped
public class MonTest implements Serializable {
@EJB
private PersonneFacadeLocal personneFacade;
private List<Personne> personnes;
private String value1;
@PostConstruct
public void init(){
personnes=personneFacade.findAll();
}
public MonTest() {
}
public List<Personne> getPersonnes() {
personnes=personneFacade.findAll();
return personnes;
}
public void test(Personne p){
System.out.println("*************************************************************************");
System.out.println(p.getNom()+"**************"+p.getPrenom()+"*********************"+p.getAge());
}
public PersonneFacadeLocal getPersonneFacade() {
return personneFacade;
}
public void setPersonneFacade(PersonneFacadeLocal personneFacade) {
this.personneFacade = personneFacade;
}
public String getValue1() {
return value1;
}
public void setValue1(String value1) {
this.value1 = value1;
}
public void onCellEdit(CellEditEvent event) {
Object oldValue = event.getOldValue();
Object newValue = event.getNewValue();
if(newValue != null && !newValue.equals(oldValue)) {
FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Cell Changed", "Old: " + oldValue + ", New:" + newValue);
FacesContext.getCurrentInstance().addMessage(null, msg);
}
}
}
Your getter to the list personnes is retrieving the data from the database and your onCellEdit method is not updating the database. So the data on the datatable will always be the same. Change your onCellEdit method to trigger the update method to the entity which is being changed (to get this entity, use event.getObject()).