2013-01-04 78 views
3

我有一個數據表,它具有添加編輯刪除和過濾操作。添加操作後PrimeFaces數據表不能正確刷新

所有操作都在數據庫上正常工作,但數據表在添加操作後未正確更新。

它在第一次添加操作後正確更新。 當我添加第二行時,數據表被更新,但是首先添加的行被替換爲第二行添加的行,但在數據庫中它們被正確更新。

同樣,當我添加第3行第1行被替換爲第3行。在CRUD dataTable的應用程序中使用

軟件堆棧是: - PrimeFace 3.4.2,JSF 2.1,NetBeans的7.2.1,Java的GlassFish的1.6.0_37 3.1.X,MySql的5.x的

這是我的代碼。

**xhtml page** 

<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:p="http://primefaces.org/ui"> 

<h:head> 
    <title>Prime Faces Data table</title> 
</h:head> 
<h:body> 
    <h:form id="form1"> 

     <h:messages id="messages1"/> 
     <br/> 

     <p:commandButton id="Addbtn" value="Add" oncomplete="AddDialog.show()" 
     update=":addform"/>     
     <br/> 

     <p:dataTable id="dtusers" value="#{userdataController.retrieveData()}" 
     var="item" 
        rows="8" paginator="true" emptyMessage="No Records Found" 
        paginatorAlwaysVisible="false"> 

      <p:column style="width:150px" filterMatchMode="contains" 
      filterBy ="#{item.id}"> 
       <f:facet name="header"> Id </f:facet> 
       <h:outputText value="#{item.id}"/> 
      </p:column> 

      <p:column style="width:150px" filterMatchMode="contains" 
      filterBy="#{item.name}"> 
       <f:facet name="header"> Name </f:facet> 
       <h:outputText value="#{item.name}"/> 
      </p:column>  

      <p:column style="width:150px"> 
       <p:commandButton id="editButton" update=":editform" 
        oncomplete="EditDialog.show()" value="Edit"> 
        <f:setPropertyActionListener value="#{item}" 
        target="#{userdataController.selectedUser}"/> 
       </p:commandButton>      
      </p:column> 

      <p:column style="width:150px"> 
       <p:commandButton id="deleteButton" update=":deleteform" 
        oncomplete="UserDialog.show()" value="Delete"> 
        <f:setPropertyActionListener value="#{item}" 
         target="#{userdataController.selectedUser}"/> 
       </p:commandButton>  
      </p:column>     

     </p:dataTable> 
    </h:form> 
     <p:dialog header="Add User Data" resizable="false" id="AddDialog" 
     widgetVar="AddDialog" modal="true" showEffect="fade" hideEffect="fade" 
     position="center" > 
     <h:form id="addform"> 
      <p:outputPanel id="AddDisplay"> 

       <p:panelGrid columns="2" > 

        <f:facet name="header"> 
         Add Userdata 
        </f:facet> 

        <h:outputLabel for="Id" value="Enter Id:"/> 
        <p:inputText id="Id" value="#{userdataController.selected.id}" /> 

        <h:outputLabel for="Name" value="Enter Name:"/> 
        <p:inputText id="Name" 
         value="#{userdataController.selected.name}"/> 

        <p:commandButton actionListener="#{userdataController.createdata}" 
         update=":form1:dtusers :form1:messages1" value="Save"  
         oncomplete="AddDialog.hide()" style="margin:0"/> 


       </p:panelGrid> 
       </p:outputPanel> 
     </h:form> 
     </p:dialog> 
     //similarly dialogs for delete and edit 

     </h:body> 

     </html> 


     **ManagedBean** 

    @ManagedBean(name = "userdataController") 
    @SessionScoped 
    public class UserdataController implements Serializable { 

    private Userdata current; 
    private DataModel items = null; 
    @EJB 
    private PrimeFacesDb.session.UserdataFacade ejbFacade; 
    private int id; 
    private String name; 
    private Userdata SelectedUser; 

    public UserdataController() { 
    } 
//getters setters for id,name and SelectedUser 

    private UserdataFacade getFacade() { 
    return ejbFacade; 
    } 
    public List retrieveData() { 
    List result = getFacade().findAll(); 
    return result; 
    } 

    public void create() { 
    try { 
     getFacade().create(current); 
     JsfUtil.addSuccessMessage("Userdata created successfully"); 
    } catch (Exception e) { 
     JsfUtil.addErrorMessage(e, "Persistence Error occured"); 
    } 
    } 
} 
+0

我通過以下鏈接使用Lawyno建議的代碼解決了我的問題: http://forum.primefaces.org/viewtopic.php?f=3&t=11389&hilit=dialog+open&start=20 現在表格是在添加操作後正確更新。 – jahnavi

+0

你應該添加這個答案和細節並接受它! –

回答

0

使用過程=「:窗口2:AddDisplay」,我認爲這是你的問題,因爲proccess默認它的全貌,或者你有你的findAll(高速緩存),或現在傑傑奧

+0

我嘗試過使用process =「:addform:AddDisplay」,但它不起作用 – jahnavi