2016-08-18 32 views
1

以下问题,我想从我的后台bean更新我的前端。更新视图后端,将无法正常工作

查看:

<p:layoutUnit id="center" position="center"> 
     <p:layout> 
      <p:layoutUnit id="inner_north" position="north" size="100"> 
       <h:form id="fortschrittForm"> 
        <h:panelGrid columns="10" id="fortschritt" cellspacing="7" title="Fortschritt" cellpadding="6"> 
         <h:outputText value="Mails heruntergeladen:"/> 
         <p:graphicImage library="img" name="erfolg.png" 
          rendered="#{managedBean.mails}" /> 
         <h:outputText value="Pdfs wurden gelesen:"/> 
         <p:graphicImage library="img" name="erfolg.png" 
          rendered="#{managedBean.pdfs}" /> 
        </h:panelGrid> 
       </h:form> 
       [...] 

按钮:

<p:commandButton value="Transition starten" actionListener="#{managedBean.prozessablauf}" update=":formTabelle:formDetail:msg anzeigeRisiko"/> 

后端:

public void prozessablauf() { 
    try { 
emailHerunterladen(); 
mails = true; 
RequestContext.getCurrentInstance().update("fortschrittForm:fortschritt"); 

} catch (Exception e) { 
     e.printStackTrace(); 
    } 

我的问题是

RequestContext.getCurrentInstance().update("fortschrittForm:fortschritt"); 

未开火。只要方法完成,所有图标都会显示出来。但我特别想要更新fortschrittForm。

继承人从萤火代码: enter image description here

+0

使用浏览器检查Id确实是“fortschrittForm:fortschritt”。另请尝试“:fortschrittForm:fortschritt”。如果你在按钮上使用update =“”fortschrittForm:fortschritt“,会发生什么? – farrellmr

+0

farrellmr:他们两个我都检查过了,如果我在后台点击一个很长的进程启动例如我首先从我的附件下载邮件电子邮件帐户,在他们之后我阅读附件等等。因此,对于每一步(下载附件=完成),我想在视图上显示成功图标。为此,我需要通过我的后端更新我的前端 –

+0

是通话在按钮更新导致问题 - 将更新部分从按钮移动到更新方法?此外,在这一点上肯定更新的模型? – farrellmr

回答

0

我的问题是

RequestContext.getCurrentInstance().update("fortschrittForm:fortschritt"); 

不点火。

您误解了RequestContext#update方法的行为。它不会触发单独的响应。它只是提供了一种简单的方法来设置在运行时在当前请求内更新哪些组件,而不是通过标记中的更新属性对其进行硬编码。

只要方法完成,所有图标都会显示出来。

这是正常的行为。

客户端视图的每次更改都必须由客户端请求进行。这是它的工作原理(除非你使用套接字或类似的东西)。因此,要反映服务器端长时间运行或复合进程的更新,只要进程正在运行,就必须从客户端轮询更新。

E.g. <p:poll />是一个很好的候选人一起去,我会尝试这样的事情:

  1. 当请求在客户端的过程的开始,还与更新属性设置的目标部分开始<p:poll />视图。
  2. 当进程在服务器端运行时,分别更新与客户端视图的目标部分关联的模型值。
  3. 当进程在服务器端结束时,请求最终更新视图的目标部分并停止客户端的轮询。

此外,我只是发现了一些有趣的东西,这也许是你的一个选择。看看PrimeFaces Push

+0

那么是否有解决方案呢? –

+0

@ Captai-N更新回答问题。 – irieill

+0

谢谢,但没有做这项工作。问题是,在流程运行期间,投票直到响应完成才开始投票。 –