2014-09-03 32 views
-1

我目前有一个editMode设置为单元格的primefaces数据表。当我给一个给定的单元格输入一个新值时,它不想获得我刚刚输入的最新值,而是一直返回现有值(旧值)CellEditEvent event.getNewValue()不断返回旧值

例如,如果旧值为7,并且我编辑它3,event.getNewValue()返回7,而不是3

这里是我的XHTML文件:

<?xml version="1.0" encoding="UTF-8"?> 
<!-- 
To change this license header, choose License Headers in Project Properties. 
To change this template file, choose Tools | Templates 
and open the template in the editor. 
--> 
<!DOCTYPE html> 
<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"> 
    <h:head> 
     <title>Admin</title> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
    </h:head> 
    <body> 

     <ui:composition template="template.xhtml"> 

      <ui:define name="content"> 
       <div id="header"> 
        <div id="logo"> 
         <h:form> 
          <h:link outcome="adminHome"> 
           <h:graphicImage value="resources/img/logo.png" alt="Monash South Africa - A campus of Monash Univeristy Australia"/> 
          </h:link> 
         </h:form> 
        </div> 

        <ul> 
         <h:form> 
          <li>Help</li> 
          <li><h:link value="Logout" outcome="login"></h:link></li> 
         </h:form> 
        </ul> 
       </div> 

       <h:form id="adminHome"> 
        <p:menubar> 
         <p:menuitem value="Home" icon="ui-icon-home" url="faces/userHome.xhtml" style="margin-left: 0px !important; margin-right: 0px !important;"/> 
         <p:menuitem value="View Applications" icon="ui-icon-document" url="faces/userHome.xhtml" style="margin-left: 0px !important; margin-right: 0px !important;"/> 
         <p:submenu label="Manage" icon="ui-icon-document" style="margin-left: 0px !important; margin-right: 0px !important;">       
          <p:menuitem value="GPA Grants" url="#" style="padding-left: 0% !important; margin-left: 0% !important;"/> 
          <p:menuitem value="Achievement Levels" url="#" style="padding-left: 0% !important; margin-left: 0% !important;"/> 
          <p:menuitem value="Marks" url="#" style="padding-left: 0% !important; margin-left: 0% !important;"/> 
         </p:submenu> 
        </p:menubar> 
        <p:messages id="messages" showDetail="true" autoUpdate="true" closable="true" /> 
        <h3>List of Applications</h3>      

        <p:dataTable id="appDT" value="#{applicationFacade.applications}" var="item" resizableColumns="true" liveResize="true" selection="#{applicationFacade.appList}" rowKey="#{item.applicationid}" paginator="true" rows="50" rowsPerPageTemplate="50,100,150" editable="true" editMode="cell"> 

         <p:ajax event="cellEdit" listener="#{applicationFacade.onCellEdit}" update="appDT"/> 

         <p:column selectionMode="multiple" style="width:16px;text-align:center"/>       
         <p:column> 
          <f:facet name="header"> 
           <h:outputText value="Studentid"/> 
          </f:facet> 
          <h:outputText value="#{item.studentid}"/> 
         </p:column> 
         <p:column> 
          <f:facet name="header"> 
           <h:outputText value="Email"/> 
          </f:facet> 
          <h:outputText value="#{item.email}"/> 
         </p:column> 
         <p:column> 
          <f:facet name="header"> 
           <h:outputText value="Coursecode"/> 
          </f:facet> 
          <h:outputText value="#{item.coursecode}"/> 
         </p:column> 
         <p:column> 
          <f:facet name="header"> 
           <h:outputText value="Levelofstudy"/> 
          </f:facet> 
          <h:outputText value="#{item.levelofstudy}"/> 
         </p:column>        
         <p:column headerText="AL"> 
          <p:cellEditor> 
           <f:facet name="output"><h:outputText value="#{item.al}"/></f:facet> 
           <f:facet name="input"><p:inputText value="#{item.al}"/></f:facet> 
          </p:cellEditor> 
         </p:column> 
         <p:column> 
          <f:facet name="header"> 
           <h:outputText value="GPA"/> 
          </f:facet> 
          <h:outputText value="#{item.gpa}"/> 
         </p:column> 
         <p:column> 
          <f:facet name="header"> 
           <h:outputText value="AVG"/> 
          </f:facet> 
          <h:outputText value="#{item.average}"/> 
         </p:column> 
         <p:column> 
          <f:facet name="header"> 
           <h:outputText value="Approvalcount"/> 
          </f:facet> 
          <h:outputText value="#{item.approvalcount}"/> 
         </p:column> 

         <f:facet name="footer"> 
          <p:commandButton action="#{applicationFacade.approveApplication()}" icon="ui-icon-check" value="Approve" update="appDT"/> 
          <p:commandButton action="#{applicationFacade.rejectApplication()}" icon="ui-icon-closethick" value="Reject" update="appDT"/> 
         </f:facet>       



        </p:dataTable> 
       </h:form> 

      </ui:define> 

     </ui:composition> 


    </body> 
</html> 

,这里是我的豆

package DataAccess; 

import Entities.Application; 
import java.util.List; 
import javax.ejb.Stateless; 
import javax.faces.application.FacesMessage; 
import javax.faces.context.FacesContext; 
import javax.inject.Named; 
import javax.persistence.EntityManager; 
import javax.persistence.PersistenceContext; 
import org.primefaces.event.CellEditEvent; 


@Stateless 
@Named(value = "applicationFacade") 
public class ApplicationFacade extends AbstractFacade<Application> { 

    @PersistenceContext(unitName = "com.mycompany_WSAMS_war_1.0-SNAPSHOTPU") 
    private EntityManager em; 
    private List<Application> appList; 
    private List<Application> removeList; 
    private Application appRef; 
    private Application appRef1;  
    private int approvalCounter; 

    @Override 
    protected EntityManager getEntityManager() { 
     return em; 
    } 

    public ApplicationFacade() { 
     super(Application.class); 
    } 

    public List<Application> getAppList() { 
     return appList; 
    } 

    public void setAppList(List<Application> appList) { 
     this.appList = appList; 
    } 

    // ----------------------------------------------------------------------------Business------------------------------------------------------------------ 
    public List<Application> getApplications() { 
     return em.createNamedQuery("Application.findAll").getResultList(); 
    } 

    public void approveApplication() { 
     for (Application each : appList) { 
      approvalCounter = each.getApprovalcount(); 
      approvalCounter++; 

      if (approvalCounter > 6) { 
       infoSix(); 
      } else { 
       each.setApprovalcount(approvalCounter); 
       appRef = em.merge(each); 
       em.persist(appRef); 
      } 
     } 
    } 

    public void rejectApplication() { 
     for (Application each : appList) { 
      approvalCounter = each.getApprovalcount(); 

      if (approvalCounter == 0) { 
       infoZero(); 
      } else { 
       approvalCounter--; 
       each.setApprovalcount(approvalCounter); 
       appRef = em.merge(each); 
       em.persist(appRef); 
      } 

     } 
    } 

    public void createApplication() { 
     for (Application each : appList) { 
      em.persist(each); 
     } 
    } 

    public void deleteApplication() { 

     for (Application each : appList) { 
      appRef = em.merge(each); 
      em.remove(appRef); 
     } 
    } 

    public void infoSix() { 
     FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Info", "This Application Already Has 6 Approvals")); 
    } 

    public void infoZero() { 
     FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Info", "This Application Is Already at 0 Approvals")); 
    } 

    public void onCellEdit(CellEditEvent event) { 
     Object AL = event.getNewValue(); 
     Object ALO = event.getOldValue(); 
     //appRef1 = appList.get(0); 
     //appRef1.setAl(AL); 
     //appRef = em.merge(appRef1); 
     //em.persist(appRef); 
     FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Info", "Application Successfully Changed"+AL+ALO)); 

    } 
    /*public void createApplication(Application appRef){  
    em.persist(appRef); 
    } */ 
} 

我希望有人经历了次e同样的问题,并知道解决方案

回答

0

在我看来,你的bean需要一个范围才能正常工作。 正如你的代码所示,它会有依赖范围,这对JSF没有帮助。