2013-11-27 40 views
0

我有一個init()函數,該函數返回將顯示在Primefaces數據表中的電子郵件列表。我有一個commandButton提取電子郵件,並堅持他們在dataTable。這些新的記錄在dataTable顯示只有當我註銷並登錄 這是我init()功能(我的管理bean被註解爲@ManagedBean(name = "mailMB")@SessionScoped):添加記錄後數據表未更新

​​

在我的網頁XHTML我實現代碼如下:

<h:form id="form"> 
     <p:commandButton value="Extract" update="tableemails" id="ajax" widgetVar="extractButton" 
       action="#{mailMB.searchEmails()}" 
       icon="ui-icon-disk" styleClass="ui-priority-primary" 
       onstart="blockUIWidget1.block()" 
       oncomplete="blockUIWidget1.unblock()"/> 

     <pe:blockUI target="formulaire" widgetVar="blockUIWidget1"> 
      <h:panelGrid columns="2"> 
       <img src="../../pictures/animated-loading-bar.gif" width="264" height="34" alt="animated-loading-bar"/> 
       <h:outputText value="Please wait..." style="white-space: nowrap;"/> 
      </h:panelGrid> 
     </pe:blockUI> 
     <p:panel id="display" header="Emails" > 
      <p:dataTable id="tableemails" value="#{mailMB.emails}" var="item" rowsPerPageTemplate="5,10,15" paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}" 
         paginator="true" rows="10" styleClass="case-table" emptyMessage="No records found with given criteria" paginatorPosition="bottom" 
         filteredValue="#{mailMB.filteredMails}" rowKey="#{item.id}" 
         selection="#{mailMB.selectedMail}" selectionMode="single" > 
       <p:ajax event="rowSelect" update=":form:display"/>    
       <p:column styleClass="blockable" filterStyle="width: 250px" filterBy="#{item.email} " sortBy="#{item.email}"> 
        <f:facet name="header"> 
         <h:outputText value="Email"/> 
        </f:facet> 
        <h:outputText value="#{item.email}"/> 
       </p:column> 
      </p:dataTable> 
     </p:panel>      
</h:form> 

回答

0

它看起來像你沒有重新加載你的List<Email> emails後持續一些新的數據。 @PostConstract在創建bean後執行一次(因爲它是@SessionScoped它在每個會話中創建一次),這就是爲什麼只有在另一次登錄後才能看到更改。添加一個方法repopulateEmails(),可以從數據庫加載數據並在添加/刪除某些內容後運行它,只需將其添加到您的persist()方法即可。

public void persist() 
{ 
    .... 
    getEntityManager().persist(getInstance()); 
    getEntityManager().flush(); 
    emails = null; 
    ...... 

} 

public List<Email> getEmails(){ 
    if(emails == null){ 
     emails = repopulateEmails(); 
    } 
    return emails; 
} 
+0

我沒怎麼堅持他們 –

+0

加載它們相同的方式,在'的init()'方法加載它們後reloadt的郵件列表。 – Kuba

+0

當我將它們加載到getEmails()方法而不是init()中時,dataTable中的行會被重複多次,但仍不會更新dataTable –

相關問題