【问题标题】:Redirecting Icefaces page from an independent thread?从独立线程重定向 Icefaces 页面?
【发布时间】:2011-04-26 11:37:23
【问题描述】:

我正在执行一项需要一段时间的验证任务,并将验证过程转入一个单独的线程。我已经让进度条工作了,PortableRenderer 和 ViewScope 允许它更新进度条组件。

但是,一旦页面完成或发生验证错误,我会尝试重定向用户,而无需用户交互。

我正在使用 AND new to icefaces2.0(beta 1) 和 JSF 2.0,所以答案可能就在我面前。对不起,如果这是一个非常简单的问题。

【问题讨论】:

    标签: java web-applications jsf jsf-2 icefaces


    【解决方案1】:

    让 ajax 来执行这项工作,而不是自己产生一个线程。


    更新 根据 cmets:嗯,这有点生硬。但是,如果您不知道自己在做什么,那么在 servlet 容器中自己生成一个线程会带来很大的麻烦。功能需求现在变得更有意义了。最好的办法是使用 IceFaces 的 push 或 poll 组件,这反过来会导致客户端的 JavaScript 在所需的 URL 上执行 window.location

    【讨论】:

    • 这就是我理想的做法。但我需要它在浏览器加载时启动并报告进度。听起来我需要学习 jsf 2.0 及其 Ajax 关联。我宁愿使用 spring 和 jquery,但不是我的选择。
    • 查看答案更新。顺便说一句:那么你将如何在 Spring/jQuery 中做到这一点?您通常可以在 JSF 风格中做同样的事情。
    • 我会让 jquery 在页面加载时点击一个由 spring 映射的 URL 来启动它。然后每 5 秒循环轮询一次,直到弹簧返回 true。不确定这是最好的方法,但我认为它会起作用。
    • IceFaces 有一个投票组件。抱歉,由于我不使用 IceFaces,因此无法进一步详细说明。我只亲身体验过基本的 JSF impl 以及 Tomahawk 和 PrimeFaces 组件库。
    • 我检查了那个投票组件。不幸的是,它是一个复合组件,只有在您为其订阅付费时才可用。 (composite-component-showcase.icefaces.org/…) 太糟糕了,它符合这个要求。我确实也研究了推送机制(icefaces.org/main/ajax-java/ajaxpush.iface),但它已经谈到了将渲染器与组一起使用,这就是我正在做的事情。听起来我只需要在页面加载时发送一个请求,以便它由 Icefaces 处理,因此渲染器不需要便携
    【解决方案2】:

    我最终还是回到了自己的方式。

    我将 JSF bean 放入会话属性中,并将便携式渲染器作为属性注入。由于 Spring 无法获取“视图”范围,因此使用了 session 属性。如果 Spring 有办法做到这一点,那可以节省很多潜在的陷阱,但是我不知道怎么做。

    页面加载后,将对 Spring 控制器进行 jquery AJAX 调用,该控制器将 JSF bean 从会话中取出,在进程中将其删除,然后继续“验证”。随着它的进行,它将当前完成状态粘贴到会话属性中,并调用调用便携式渲染器的 bean 函数,该渲染器进而更新进度表。

    也是页面加载函数的一部分,是一个单独的函数,它调用另一个 Spring Controller,它返回完成的状态对象,可能/可能没有错误消息。

    我计划删除第二个控制器,方法是检查页面上已经由便携式渲染器渲染的值,并将所有这些错误发布到 bean 中,然后可以轻松可靠地渲染它。

    正如 BalusC 所说,这种方式消除了不直接由容器产生的线程的创建,并允许我在成功完成后通过 window.location 自动重定向。

    如果有更好的方法来做到这一点,我想有,请添加一个答案。目前我对 Icefaces 和 JSF 的了解严重不足,我会感谢任何有最佳方法的人。

    【讨论】:

      猜你喜欢
      • 2015-10-26
      • 2010-11-21
      • 1970-01-01
      • 1970-01-01
      • 2021-06-08
      • 2014-01-09
      • 1970-01-01
      • 2013-07-13
      • 2011-07-21
      相关资源
      最近更新 更多