2012-11-06 72 views
0

我只有<p:dataTable/>。當我在另一個頁面中向該表格添加新行時,表格不會刷新。 RmaBean是managedBean範圍的會話。有任何想法嗎?如何在每次下載頁面時更新Primefaces數據表?

<h:form id="mainMenuForm">   

      <p:dataTable id="dataTable" 
         var="case" 
         value="#{RmaBean.rmaModel}" 
         widgetVar="rmaTable" 
         editable="true" 

         rows="10" paginator="TRUE" emptyMessage="No items found with given criteria."> 

...

<p:column></p:column> 
     <p:column></p:column> 
     <p:column><p:commandButton action="#{MainController.talletaUusiRma}" value="#{bundle.newRma_tallenna}" immediate="true" ajax="false" style="width: 220px;"/></p:column> 
    </p:row> 

當我添加一個新的對象到該表,我剛更新rmaModel每一次,我甚至檢查清單比以前更長之一,有那個新的對象。 dataTable仍顯示沒有新對象的舊數據,爲什麼?

--------創建新RMA -------------

public String prepareNewRma() { 
    current = new Rma(); 
    current.setUser(""); 
    return "newRma"; 
} 

--------獲取數據TO THE NEW RMA WITH序列號------

public String haeTiedotSarjanrolla() { 
    log.info("sarjanro=" + current.getSarjanro()); 
    System.out.println("---------------->sarjanro=" + current.getSarjanro()); 

    Sarjanumerot s = helper.getSerialInfo(current.getSarjanro()); 

    if (s != null) { 
     current.setAn8(s.getAn8()); 
     current.setDsc1(s.getDsc1()); 
     current.setDsc2(s.getDsc2()); 
     current.setSarjanro(s.getId().getLotn()); 
     current.setTuotenro(s.getId().getLitm()); 
    } 
    return "newRma"; 
} 

--------保存新的RMA ---------------

public String talletaUusiRma() { 

    current.setCreated(new Timestamp(System.currentTimeMillis())); 
    helper.tallennaRma(current); 
    rmaNumbers = null; 

    RmaBean papu = (RmaBean) JsfUtil.findBean("rmapapu"); 

    papu.updateTable(); 
    return "mainMenu"; 
} 

HELPER:

public void tallennaRma(Rma current) { 
     try { 
      Session session = HibernateUtil.getAsekorjausSessionFactory().getCurrentSession(); 
      session.beginTransaction(); 
      session.saveOrUpdate(current); 
      session.getTransaction().commit(); 
     } catch (Exception e) { 
      log.debug(e.getMessage()); 
         JsfUtil.addErrorMessage(ResourceBundle.getBundle("resources/Bundle").getString("editRma_err_updateError")); 
     } 

---------修正模型和表中RmaBean -----------

public void updateTable(){ 

    System.out.println("updateTableupdateTableupdateTable"); 
    rmaModel.setWrappedData(rmaModel.getUpdatedList()); 
    System.out.println("1111111.........."); 
    List<Rma> rmat = rmaModel.getUpdatedList(); 
    System.out.println("22222222......."); 
    Iterator iter = rmat.iterator(); 
    System.out.println("------------------------>PITUUS: " +rmat.size()); 
    while (iter.hasNext()) { 
     Rma t = (Rma) iter.next(); 
     System.out.println("t.getRma()NUMERO------->" +t.getRma()); 


    } 

    RmaDataModel newRMAModel = new RmaDataModel(rmat); 
    rmaModel = newRMAModel; 
} 

薩米

+0

您能夠利用它增加了一個新元素到列表中的方法延長你的問題?請修正上面的代碼片段,發佈方法的整個代碼或張貼方法簽名並標記缺少的代碼片段。 –

+0

現在可以嗎?我昨天很累,我試圖變得快速:) – Sami

回答

1

你的價值屬性數據表上在會話範圍內,因此只有在此會話中首次請求時纔會呈現數據表(如果不手動更新此視圖)。

爲您的視圖使用視圖範圍的bean。如果這個列表有必要在會話範圍內,只需將任何會話範圍的bean中的列表注入到您的視圖範圍的bean中。

+0

我該如何改變它,或者你的意思是豆的範圍? – Sami

0

如果我很好地理解你的問題,你希望在另一個頁面完成操作時更新一個頁面,而不是使用ajax更新自動完成。它必須通過推動完成。你有它在primefaces幾個例子展示:

http://www.primefaces.org/showcase/push/index.jsf

從第一個例子:

<h:form id="form"> 
    <h:outputText id="out" value="#{globalCounter.count}" styleClass="ui-widget display" /> 

    <br /> 

    <p:commandButton value="Click" actionListener="#{globalCounter.increment}" /> 
</h:form> 

    <p:socket onMessage="handleMessage" channel="/counter" /> 

BB

public synchronized void increment() { 
     count++; 

     PushContext pushContext = PushContextFactory.getDefault(); 
     pushContext.push("/counter", String.valueOf(count)); 
    } 
+0

我覺得這太複雜了嗎?應該有一些更容易:)我把這留給我的最後一次機會。 – Sami

0

我做了一個真正的泡泡糖解決方案,因爲我不能否則就不適合。我只是再次將bean寫入會話,因此它會覆蓋名稱爲「rmapapu」的舊bean。不,它正在工作。有沒有什麼後果,或者這真的是個壞主意?

rmaModel = null; 
    RmaDataModel rmaModel = new RmaDataModel(rmat); 
    //rmaModel = newRMAModel; 
    this.setRmaModel(rmaModel); 

    FacesContext context = FacesContext.getCurrentInstance(); 
    HttpServletRequest request = (HttpServletRequest) context.getExternalContext().getRequest(); 
    HttpSession httpSession = request.getSession(false); 
    httpSession.setAttribute("rmapapu", this); 

感謝大家幫助我。我還是會讀BalusC教程的,因爲它會很高興知道你應該怎麼做:)

薩米

相關問題