提起Request,那就是“简洁”,“迅速”的代名字,而Session呢,不到万不得已,尽量少去使用,一般长期保存数据时,如保存用户登录信息等,才会使用。
众所周知,Request是不保存状态的,每一次操作都必须将所需要处理的数据提交到服务器端。日益复杂的应用,已经很难满足在每一次请求都将一大批数据挂在参数列表上,特别是一个操作跨多个请求,每个请求之间的相互关联,框架无法满足所有数据的动态传递,故不能用Request方式,如果要在服务器端保存数据,只能使用Session方式,而Session方式带来的性能问题及并发问题,总是怨声载道,不到万不得已,不想使用Session。
在这种需求下,OperaMasks推出一种介乎于Request和Session范围中间的一个上下文ConversationContext,通过此上下文保存数据,用户可以在一个跨请求的操作中保存用户的数据,并在后续的请求获取前一次提交的值,ConversationContext由框架内部进行管理,默认的存活时间为120秒,远小于Session存活时间30分钟,用户保存的数据在2分钟后随ConversationContext的清除而清除掉,不会太大影响性能。
如DataGrid,其取数操作(对用户透明)在页面第二次请求时完成,此时,用户希望根据一定的条件来进行取数,OperaMasks将用户加了@SaveState注解的字段保存于ConversationContext中,当用户第二次取数操作时可以拿到@SaveState的值,此时可以根据拿到的值来进行数据筛选。

关于ConversationContext更多的内容,请参考第 15.5 节 “ConversationContext,Request和Session之间的会话上下文”