2012-11-06 135 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教程的,因为它会很高兴知道你应该怎么做:)

萨米

相关问题