Primefaces 使用后端更新视图,赢得';行不通

Primefaces 使用后端更新视图,赢得';行不通,primefaces,Primefaces,以下问题,我想从我的支持bean更新我的前端 视图: 我的问题是 RequestContext.getCurrentInstance().update("fortschrittForm:fortschritt"); RequestContext.getCurrentInstance().update("fortschrittForm:fortschritt"); 他没有开火。当该方法完全完成时,将显示所有图标。但我特别想更新fortschrittForm 以下是firebug中的代码: 我

以下问题,我想从我的支持bean更新我的前端

视图:

我的问题是

RequestContext.getCurrentInstance().update("fortschrittForm:fortschritt");
RequestContext.getCurrentInstance().update("fortschrittForm:fortschritt");
他没有开火。当该方法完全完成时,将显示所有图标。但我特别想更新fortschrittForm

以下是firebug中的代码:

我的问题是

RequestContext.getCurrentInstance().update("fortschrittForm:fortschritt");
RequestContext.getCurrentInstance().update("fortschrittForm:fortschritt");
他没有开火

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

当该方法完全完成时,将显示所有图标

这是正常的行为

对客户端视图的每次更改都必须通过客户端的请求进行。这就是它的工作原理(除非您使用的是套接字或类似的东西)。因此,为了在服务器端反映来自长时间运行或复合进程的更新,您必须在进程运行期间轮询来自客户端的更新

例如,他是一个很好的候选人,我会尝试以下方式:

  • 在客户端请求启动流程时,也要启动
    ,并将更新属性设置为视图的目标部分
  • 当进程在服务器端运行时,分别在客户端更新与视图目标部分关联的模型值
  • 当进程在服务器端结束时,请求对视图的目标部分进行最终更新,并在客户端停止轮询
  • 此外,我刚刚发现了一些有趣的东西,这可能也是你的一个选择。看看

    我的问题是

    RequestContext.getCurrentInstance().update("fortschrittForm:fortschritt");
    
    RequestContext.getCurrentInstance().update("fortschrittForm:fortschritt");
    
    他没有开火

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

    当该方法完全完成时,将显示所有图标

    这是正常的行为

    对客户端视图的每次更改都必须通过客户端的请求进行。这就是它的工作原理(除非您使用的是套接字或类似的东西)。因此,为了在服务器端反映来自长时间运行或复合进程的更新,您必须在进程运行期间轮询来自客户端的更新

    例如,他是一个很好的候选人,我会尝试以下方式:

  • 在客户端请求启动流程时,也要启动
    ,并将更新属性设置为视图的目标部分
  • 当进程在服务器端运行时,分别在客户端更新与视图目标部分关联的模型值
  • 当进程在服务器端结束时,请求对视图的目标部分进行最终更新,并在客户端停止轮询


  • 此外,我刚刚发现了一些有趣的东西,这可能也是你的一个选择。查看

    使用浏览器检查Id是否确实为“fortschrittForm:fortschritt”。还可以尝试“:fortschrittForm:fortschritt”。如果在按钮上使用update=”“fortschrittForm:fortschritt”会发生什么情况?farrellmr:我已经检查了它们。如果我单击按钮,一个漫长的过程将在后台开始。例如,首先我从电子邮件帐户下载带有附件的邮件,然后我阅读附件,依此类推。因此对于每个步骤(下载附件=完成)我想在视图上显示一个成功图标。为此,我需要通过我的后端更新我的前端。按钮中的更新调用是否会导致问题-将更新部分从按钮移动到更新方法?此时模型是否确实已更新?正如你在我按钮的上面部分所看到的,我没有调用我的“fort”的idSurrtType在我的按钮中的更新属性中,所以更新是由我的后端完成的,但是在我的工作结束时,不是所有的都是唯一的,如果是我,Id将它们删除为一个测试,并且还考虑将H:PANELGRAPH转换为P:PANELGRID,以查看它是否执行不同的检查,该ID肯定是“FurtSrrtTyFrm:FurtSrrtt”。“使用浏览器。还可以尝试“:fortschrittForm:fortschritt”。如果在按钮上使用update=”“fortschrittForm:fortschritt”会发生什么情况?farrellmr:我已经检查了它们。如果我单击按钮,一个漫长的过程将在后台开始。例如,首先我从电子邮件帐户下载带有附件的邮件,然后我阅读附件,依此类推。因此对于每个步骤(下载附件=完成)我想在视图上显示一个成功图标。为此,我需要通过我的后端更新我的前端。按钮中的更新调用是否会导致问题-将更新部分从按钮移动到更新方法?此时模型是否确实已更新?正如你在我按钮的上面部分所看到的,我没有调用我的“fort”的idSurrtType在我的按钮的更新属性中。所以更新是由我的后端完成的,但是在我的工作结束时,不是所有的都是唯一的——如果是我,Id将它们删除为一个测试,并且还考虑将H:PANELGRAPH转换为P:PANELGRID,以查看它是否执行不同。所以有没有解决的办法?@ CAPTA-N更新的答案。谢谢。“不做这项工作。问题是,在进程运行期间,轮询在响应完成之前不会触发。@Captai-N即使请求是用AJAX发出的,轮询是通过JS在客户端启动的?很难相信,但是在另一个线程中在服务器端进行处理呢?这样会立即做出响应,您只需必须注意相应的线程通信,以更新模型值。不过,在如何实现这一点上要有创造性。有