1. 页面流使用到的数据上下文分为三个数据区,包括会话上下文数据区,请求上下文数据区,页面流上下文数据区。如图1-7所示。
(1) 会话上下文数据区
会话上下文数据区存储的数据是当前用户所在的HTTP会话数据的一个映射。开发页面流的时候可以使用s:XPATH_EXPRESSION来访问会话数据区中的数据,访问会话数据区中表达式的前缀为s:。
(2) 请求上下文数据区
请求上下文数据区中放置的是一个完整的Http Request/Response过程中产生的数据,当EOS的页面引擎接到一个HTTP Request的请求后,它会将这个请求的Key/Value参数按照规则,转换成一个或者多个Java对象放入到请求上下文数据区中;也可以使用复制图元访问或创建请求上下文数据区中的数据;调用业务逻辑或者服务的返回值也可以设置到请求上下文的数据区中。访问请求上下文数据区中的数据可以采用r:XPATH_EXPRESSION或者不带前缀,直接使用XPATH_EXPRESSION访问请求上下文数据区中的数据。
(3) 页面流上下文数据区
页面流上下文数据区存储的是在页面流里定义的变量或者对象,访问页面流上下文的表达式为f:XPATH_EXPRESSION。页面流上下文数据区的数据生命周期与相当于页面流流程级别的变量,在一个页面流实例中的不同的页面,业务逻辑,赋值操作都可以使用页面流上下文中的数据。
2. 逻辑流使用到的数据上下文为两个数据区,包括MUO上下文数据区和逻辑流上下文数据区。
(1) MUO上下文数据区
MUO上下文数据区中存放的是受管用户数据对象,访问的方式采用m:XPATH_EXPRESSION样式的表达式来访问和更新数据。在逻辑流中涉及用户数据(HttpSession)传递的过程时,因只允许对用户的部分数据有存取权限,这时就需要根据session中的部分数据构造一个受控的用户数据对象,用户只能对该受管用户数据对象做操作。
(2) 逻辑流上下文数据区
逻辑流上下文数据区和页面流的请求上下文数据区比较类似,如果把一个逻辑流比作是一个Java方法,那么逻辑流上下文数据区中的数据包含的是这个Java方法传入的参数,以及这个方法中定义的成员变量。访问逻辑流请求上下文的数据直接采用XPATH_EXPRESSION访问,不需要加任何前缀。
3. 工作流使用到的数据只包含流程上下文。
(1) 流程上下文数据区
流程上下文数据区保存的是工作流的流程相关数据,这个数据区是可序列化的,工作流流程引擎在某些场景会将这个数据区存储到数据库中。数据上下文的其他数据区都是保存到内存中的。