0

我正在我的网络应用程序中实现一个功能,这样客户端可以通过输入一些数据并单击提交按钮来生成报告。

问题是报告生成需要大量时间,如果用户输入的数据错误,报告可能不会生成。

完整的报告生成任务有许多子任务,我想当客户按下提交时,然后在该页面下方我想显示报告生成任务的状态/进度,这些任务分为各种子任务,例如

- Validating input data ------ Done
- Fetching the data     ------ In Progress
 and so on,

如何在 web 层中使用 Struts2、jQuery 来实现这一点?

任何帮助将不胜感激。

谢谢

4

2 回答 2

1

我们遇到了类似的问题。交易通常需要 20 秒,有时超过一分钟。我们认为会有更简单的解决方案,但我们最终得到了这样的方案,

  1. 当接收到长时间运行的请求时,会创建一个会话并生成一个新线程来处理该请求。
  2. 立即返回一个带有文本的页面以显示“正在收集数据...”。该页面包含一个每秒刷新一次的计时器。重新加载 URL 在查询参数中包含会话 ID(我们不使用 HttpSession)。
  3. 当操作处理程序看到带有会话 ID 的请求时,它知道会话已启动,检查工作线程正在更新的状态变量。如果没有完成,它会使用新状态“从 DB1 检索数据...”来更新页面。重新加载时会闪烁。如果您关心,您可以使用 AJAX 来更新状态。
  4. 当工作线程完成并且页面准备好交付时,调用只是返回结果。

我们遇到了负载平衡器的一些问题。为了使该方案起作用,每次重新加载都必须返回到同一台服务器。幸运的是,负载均衡器支持基于我们的会话 ID 的粘性路由。

于 2009-09-13T12:14:43.160 回答
1

看看 Struts2 ExecuteAndWait 拦截器。 http://struts.apache.org/2.x/docs/execute-and-wait-interceptor.html

于 2009-10-01T15:53:11.347 回答