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

问题是报告生成需要花费大量时间,如果用户输入数据错误,报告可能无法生成。

完整的报告生成任务有很多子任务,我希望当客户端按下提交时,然后在该页面的下方,我想显示在各种子任务中分割的报告生成任务的状态/进度,如

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

如何在Web层使用Struts2,jQuery实现这一目标?

非常感谢任何帮助。

由于

有帮助吗?

解决方案

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

  1. 当收到长时间运行的请求时,会创建一个会话并生成一个新线程来处理该请求。
  2. 立即返回包含文本的页面以显示“收集数据...”。该页面包含一个每秒刷新一次的计时器。重新加载URL包含查询参数中的会话ID(我们不使用HttpSession)。
  3. 当操作处理程序看到带有会话ID的请求时,它知道会话已启动,请检查工作线程正在更新的状态变量。如果没有完成,它将以新状态“从DB1中检索数据...”更新页面。当重新加载完成时会闪烁。如果您在意,可以使用AJAX更新状态。
  4. 当工作线程完成并且页面准备好传递时,调用只返回结果。
  5. 我们遇到了负载均衡器的一些问题。要使该方案有效,每次重新加载都必须返回到同一服务器。幸运的是,负载均衡器支持基于会话ID的粘性路由。

其他提示

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top