关于webwork中continuation用法的说明

本文介绍了WebWork框架中的Continuation特性,这是一种利用Java语言特性管理会话状态的方法。文章详细阐述了Continuation的工作原理,包括如何配置、使用及限制条件,并提供了一个猜数字游戏的示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 目的:continuation的出现,替代了通过session或者隐藏参数保存数据的方式,它是使用java语言本身的特性来控制状态
  • 目前发展状况:当前我使用的是webwork2.2.7版本,在其版本中明确说明,目前该功能还不成熟,目前建议在大型系统中不要使用该功能。
  • 其他限制条件:在ExecuteAndWait 和Token拦截器中,不能使用continuaction,因为ExecuteAndWait和Token都会限制同一个Session的请求次数, 也就是说他们不"期望"看到相同的请求
  • 用法介绍

a)类必须继承ActionSupport并且实现Preparable接口

b)在execute方法中,必须调用父类的pause方法。pause方法只能在execute方法中调用。

c)在prepare方法中,必须要调用父类的clearErrorsAndMessages();方法。其目的是,清楚上次请求后产生的field errors 和action errors,如果不清楚,会产生意想不到的错误。以下是webwork中关于这点的原始解释:// We clear the error message state before the action.That is because with continuations, the original (or cloned) action is being executed, which will still have the old errors and potentially cause problems,such as with the workflow interceptor

d)在webwork.propeties配置文件中,一定要定义webwork.continuations.package=包,其目的是告诉webwork,那个包将会使用到continuation属性

  •  原理阐述

使用continuations特性必须由WebWork管理流程状态, 因此, 这要求应用程序必须将流程的ID告知WebWork.。WebWork使用一个名为 continue 的参数为流程中的每一次请求提供一个唯一id来做到这一点.。如果使用URLForm标签来产生URL链接, continue 参数将会自动生产。 如果没有使用这些标签, continuations不会正常工作。当你提交action的时候,使用get方法,那么将会在地址栏中看到这个参数:__continue=b1683b46f8cade05eccbbb39d2c2b8ac,这个参数是通过webwork自己生成和维护的。

  • 示例代码,配置文件省略

public class PauseTestAction extends ActionSupport implements Preparable {
    private static final Log LOG = LogFactory.getLog(PauseTestAction.class);

    private int guess;

    public void prepare() throws Exception {
        // We clear the error message state before the action.
        // That is because with continuations, the original (or cloned) action is being
        //  executed, which will still have the old errors and potentially cause problems,
        //  such as with the workflow interceptor
        clearErrorsAndMessages();
    }

    public int getGuess() {
        return guess;
    }

    public void setGuess(int guess) {
        this.guess = guess;
    }

    public String execute() throws Exception {
        int answer = new Random().nextInt(100);
        int tries = 5;

        while (answer != guess && tries > 0) {
            pause(Action.SUCCESS);

            if (guess > answer) {
                addFieldError("guess", "Too high!");
            } else if (guess < answer) {
                addFieldError("guess", "Too low!");
            }

            tries--;
        }
        if (answer == guess) {
            addActionMessage("You got it!");
        } else {
            addActionMessage("You ran out of tries, the answer was " + answer);
        }

        return Action.SUCCESS;
    }

内附安装教程,含14套模板。 此源码为商业版全功能无授权版,1031全新的友价虚拟物品在线交易商城   模板源码,含14套模板带熊掌号及百度主动提交插件   源码运行环境,以下是友价虚拟物品在线交易   商城模板源码1031商业版的修复内容:   手机端:   新增手机版任务大厅功能   更新商家版会员中心界面   电脑端:   编辑商品视频栏目直接以弹窗方式展开,不用切换页面   调整保证金规则(有订单未完成,禁止解冻保证金)   新增商品问答功能   新增评价视频晒单功能   完善退款记录功能,每次退款跟处理结果都做记录(旧的只能保留最+新一次的退款记录)   支付宝等付款时,资金记录里同时记录交易号   阿里云OSS设置开关功能(后台基本设置-存储接口里)   开通阿里云OSS产品效果图也能存储的功能   友价   查看更多关于 友价 的文章   虚拟物品在线交易商城模板源码1023商业版源码安装教程   1.把程序上传到网站根目录下,不支持二级目录安装;   2.用EditPlus或者Notepad等代码编辑软件打开数据库配置文件:config/config.php 把里面的数据库信息改为自己的mysql数据库信息   文件内有标注,根据标注提示修改   3.导入数据库。把数据库目录下的shujku.sql数据库备份文件还原到你的mysql数据库内。   4.修改熊掌号地址,用editplus或者Notepad等代码编辑软件打开文件 user/baidu.php 把里面的这个域名 www.baidu.com 改为自己的   5.修改邮件通知名称,文件路径 yjadmin1/shop.php 把里面的关于 商业源码 这个名称,改为自己的,建议不要太长,否则会被屏蔽
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值