论坛首页 入门技术论坛

如何获取ww2中action的实时进度?

浏览 2588 次
该帖已经被评为新手帖
作者 正文
   发表时间:2006-11-03  
系统用freemarker+webwork+spring+hibernate实现,在做统计需求时,需要处理大量数据,耗时较长,想做一个实时的进度显示,给用户一个直观的提示,显示当前操作进行到了百分之多少多少...
具体点说,比如在做一个统计月报的时候,要先统计当月数据,并生成一个Excel,这个处理的操作可以放在action里直接实现,也可以在action里调用spring做个service实现,可以计算出当前进度(比如分段取数据处理时,可以知道当前完成的百分比),但是都不知如何及时把进度数据返回给前台页面,并实现刷新...
现在我只知道用retrun result返回model,但这样意味着action执行完毕,如何在不打断action执行的情况下,把action执行的进度提交给前台呢?
不知道我说的是否清楚,有疑问大家尽管问,非常感谢
   发表时间:2006-11-03  
action里开一新thread,action只负责启动这个thread, 返回的时候只返回进度信息
0 请登录后投票
   发表时间:2006-11-03  
webwork本身就提供了这样的interceptor:
com.opensymphony.webwork.interceptor.ExecuteAndWaitInterceptor

你只需要定义wait类型的result页面,并且在action里面加上一个能够获取执行进度的方法就可以了。
0 请登录后投票
   发表时间:2006-11-06  
Readonly 写道
webwork本身就提供了这样的interceptor:
com.opensymphony.webwork.interceptor.ExecuteAndWaitInterceptor

你只需要定义wait类型的result页面,并且在action里面加上一个能够获取执行进度的方法就可以了。

多谢提示,但是我在系统里实现的时候有问题,
我在webwork-default.xml里添加了
<interceptor name="execAndWait" class="com.opensymphony.webwork.interceptor.ExecuteAndWaitInterceptor"/>

在xwork.xml里添加了
<action name="testWait" class="com.action.cord.CordAction" method="testWait">
  <interceptor-ref name="execAndWait"/>
  <result name="success" type="freemarker">/cord/ftest.ftl</result>
  <result name="wait" type="freemarker">/cord/wait.ftl</result>
</action>

并且定义了wait页面wait.ftl
<HTML> 
<HEAD> 
<meta http-equiv="refresh" content="2"> 
</HEAD> 
<BODY> 
Wait..............
</BODY> 
</HTML>

CordAction中

public String testWait()
    {
        System.out.println("这是我的测试 ");
        try {
			System.out.println("-----start sleep!");
			System.out.println(new Date());
            Thread.sleep(2000 * 5);
            System.out.println("-----end sleep!");
            System.out.println(new Date());
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
		return SUCCESS;    
    }

但是在运行的时候第一次会出现waiting的提示,刷新后出现success页面,但是这时action应该还没有结束,而且console页面中也没有出现System.out.输出的东西,象是没有运行一样,这是怎么回事呢...
我看了论坛里moxie大大的贴子,在我的系统上也没跑起来...
0 请登录后投票
   发表时间:2006-11-09  
这个有问题吧:
<meta http-equiv="refresh" content="2">

看一下webwork自己的例子,应该是call本身的action和parameter:
<meta http-equiv="refresh" content="5;url=<@ww.url includeParams="all"/>"/>
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics