Jsf 单元格编辑中的primefaces不更新数据库中的数据

Jsf 单元格编辑中的primefaces不更新数据库中的数据,jsf,primefaces,datatable,Jsf,Primefaces,Datatable,我在一个JEE项目中使用了Primeface 4.0、JSF 2和jpa,我在单元格编辑中使用了Primefaces showcase数据表中显示的示例。下面是HTML代码 <ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:f="http://java.sun.com/jsf/

我在一个JEE项目中使用了Primeface 4.0、JSF 2和jpa,我在单元格编辑中使用了Primefaces showcase数据表中显示的示例。下面是HTML代码

<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>

这里的问题是,即使是//////,也不会显示,这意味着HTML代码中存在阻止执行onCellEdit函数的问题

我认为您只有一个问题:您的代码没有调用articlesbean.onCellEdit()方法

下面是我的简单示例,它运行良好(但我没有将richfaces组件与primefaces混合):

和xhtml:

<p:remoteCommand name="onCellEdit" action="#{articlesbean.onCellEdit()}" update=":form:messages" />
<p:dataTable id="cars" var="car" value="#{articlesbean.LMatpilotaccess1}" editable="true" editMode="cell" widgetVar="carsTable">  

        (...)

  <p:ajax event="cellEdit" oncomplete="onCellEdit()" /> 

(...)
RemoteCommand提供了一种直接从javascript执行JSF支持bean方法的方法


请试一试

我解决了类似的问题,但我花了将近3天的时间才注意到,对于JSF,getter必须是真正的getter(再次)。我的意思是,
tableBean.getData()
提供的列表必须是一个真正的getter提供列表,它在void方法中初始化,并用
@PostConstruct
注释。 JSF将围绕bean和所有代码生成一个
Proxy
类,以反映表中的更改。您只需编写代码来实现对更改做出反应的操作(在数据库中持久化更改、异步操作等等)


如果“list getter”不是真正的getter并返回另一个列表(在我的示例中,我在原始字段中过滤了列表),那么在调用“listener方法”之前,所有更改都将丢失-它们将被原始列表替换。

现在我又遇到了一个错误<代码>javax.el.MethodNotFoundException:找不到方法:com.pfe.controller。ArticlesBean@1bb3a11.onCellEdit()我认为onCellEdit()函数必须采取一些措施!!我怎样才能带上新的东西呢?很抱歉反应太晚了。这个问题现在的状况如何?带参数问题解决了吗?没有,相同的错误仍然存在!!你有什么想法可以帮助我吗?如果根本解决不了问题,为什么你会接受答案?可能是@BalusC的重复,因为我想达到15分,所以我可以上传一张照片,更好地解释我面临的问题,正如你看到的,我的英语不是很流利,我认为人们不会回答我的问题,因为他们不明白我的意思@我看到了巴卢斯,但答案对我没有帮助!!
<h:form id="testForm">
            <p:growl id="messages" showDetail="true"/>
            <p:outputPanel id="testContainer">
            <p:dataTable id="testTable" value="#{tableBean.data}" var="entry" editable="true" editMode="cell">

                    <p:ajax event="cellEdit" listener="#{tableBean.onCellEdit}" process="@this" update=":testForm:messages"/>
(...)
public void onCellEdit() {
//do some thing
<p:remoteCommand name="onCellEdit" action="#{articlesbean.onCellEdit()}" update=":form:messages" />
<p:dataTable id="cars" var="car" value="#{articlesbean.LMatpilotaccess1}" editable="true" editMode="cell" widgetVar="carsTable">  

        (...)

  <p:ajax event="cellEdit" oncomplete="onCellEdit()" />