I use Primeface 4.0 , JSF 2 and jpa in a JEE project , i used the example shown in Primefaces showcase data table in cell editing. Here is the HTML code
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:rich="http://richfaces.org/rich"
xmlns:a4j="http://richfaces.org/a4j"
xmlns:p="http://primefaces.org/ui"
xmlns:c="http://java.sun.com/jsp/jstl/core"
template="/WEB-INF/templates/default.xhtml">
<ui:define name="content">
<center>
<rich:panel style="width : 800px; height : 551px; " >
<f:facet name="header" >
<h:outputText value="Tableau des articles" align="center" style="FONT-SIZE: small;"/>
</f:facet>
<h:form id="form">
<p:growl id="messages" showDetail="true"/>
<p:contextMenu for="cars" widgetVar="cMenu">
<p:menuitem value="Edit Cell" icon="ui-icon-search" onclick="PF('carsTable').showCellEditor();return false;"/>
<p:menuitem value="Hide Menu" icon="ui-icon-close" onclick="PF('cMenu').hide()"/>
</p:contextMenu>
<p:dataTable id="cars" var="car" value="#{articlesbean.LMatpilotaccess1}" editable="true" editMode="cell" widgetVar="carsTable">
<f:facet name="header">
Matériel du pilotage et accessoires
</f:facet>
<p:ajax event="cellEdit" listenner="#{articlesbean.onCellEdit()}" update=":form:messages" />
<p:column headerText="Serie" style="width:25%">
<p:cellEditor>
<f:facet name="output"><h:outputText value="#{car.serie}" /></f:facet>
<f:facet name="input"><p:inputText id="modelInput" value="#{car.serie}" style="width:96%"/></f:facet>
</p:cellEditor>
</p:column>
<p:column headerText="Prix unitaire HTVA" style="width:25%">
<p:cellEditor>
<f:facet name="output"><h:outputText value="#{car.puhtva}" /></f:facet>
<f:facet name="input"><p:inputText id="modelInput5" value="#{car.puhtva}" style="width:96%"/></f:facet>
</p:cellEditor>
</p:column>
<p:column headerText="Montant HTVA" style="width:25%">
<p:cellEditor>
<f:facet name="output"><h:outputText value="#{car.monthtva}" /></f:facet>
<f:facet name="input"><p:inputText id="modelInput8" value="#{car.monthtva}" style="width:96%"/></f:facet>
</p:cellEditor>
</p:column>
<p:column headerText="Montant TTC" style="width:25%">
<p:cellEditor>
<f:facet name="output"><h:outputText value="#{car.montttc}" /></f:facet>
<f:facet name="input"><p:inputText id="modelInput9" value="#{car.montttc}" style="width:96%"/></f:facet>
</p:cellEditor>
</p:column>
</p:dataTable>
</h:form>
</rich:panel>
</center>
</ui:define>
</ui:composition>
and this is the Bean
package com.pfe.controller;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.inject.Inject;
import org.primefaces.component.datatable.DataTable;
import org.primefaces.event.CellEditEvent;
import com.pfe.data.ArticlesDAO;
import com.pfe.model.Matpilotaccess1;
import com.pfe.model.Matpilotaccess2;
import com.pfe.model.Poteaux;
import com.pfe.model.Travgc1;
import com.pfe.model.Travgc2;
import com.pfe.model.Travresurbain;
@ManagedBean(name="articlesbean")
@ViewScoped
public class ArticlesBean implements Serializable{
@Inject
private ArticlesDAO articleDAO;
@Inject
private Matpilotaccess1 matpilotaccess1;
@Inject
private Matpilotaccess2 matpilotaccess2;
@Inject
private Poteaux poteaux ;
@Inject
private Travgc1 travgc1;
@Inject
private Travgc2 travgc2;
@Inject
private Travresurbain travresurbain;
private List LMatpilotaccess1 = new ArrayList();
private List LMatpilotaccess2 = new ArrayList();
private List LPoteaux = new ArrayList();
private List LTravgc1 = new ArrayList();
private List LTravgc2 = new ArrayList();
private List LTravresurbain = new ArrayList();
public void onCellEdit(CellEditEvent event) {
Object oldValue = event.getOldValue();
Object newValue = event.getNewValue();
System.out.println("////////////////////////);
if(newValue != null && !newValue.equals(oldValue)) {
DataTable s = (DataTable) event.getSource();
Matpilotaccess1 d = (Matpilotaccess1) s.getRowData();
articleDAO.Updatetable(d);
System.out.println("///////////////////");
FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Cell Changed", "Old: " + oldValue + ", New:" + newValue);
FacesContext.getCurrentInstance().addMessage(null, msg);
}
} ///// getters and setters
the problem here is that even /////////////// are not displayed which means there is a problem in the HTML code that prevent the execution of onCellEdit function !!!
Best Solution
I think you have only one problem: your code not call your articlesbean.onCellEdit() method.
Here is my simple which works fine (but i not mixed richfaces components with primefaces):
The message correctly appear after the user edit in table. Please try to replace richfaces panel to primefaces panel may be that is occured this problem.
If you have some update problem in p:ajax you can use RemoteCommand. But in this case you need redesign your method in articlesbean to:
and xhtml:
RemoteCommand provides a way to execute JSF backing bean methods directly from javascript.
Please try it!