OAF中putTransactionTransientValue()

问题描述:

在OAF页面中,table控件可以分页显示视图对象中的数据,默认情况下,每页显示10条数据。
假设有这样一个开发,查询页面用于查询用户需要的数据,而选择一条数据后就进入操作界面,用户可以执行一系列操作,还可以执行Commit和Rollback操作。当用户操作完成后,需要回到查询页面,那么查询页面必须保持用户查询之后的的状态,包括表格中的数据以及当前表格所处的页。

解决方法:

开发的时候,需要将用户输入的查询项保存到缓存中,如果查询页面和操作页面使用相同的Root AM,那么可以将用户输入的值保存到Transaction中,使用pageContext.putTransactionValue()/getOADBTrasaction().putValue()或pageContext.putTransactionTransientValue()/getOADBTrasaction().putTransientValue()方法。在初始化查询页面时,根据Transaction中的值,初始化视图对象查询。如果两个页面使用不同的Root AM,那么应该将用户输入的值保存到Sesison中,使用pageContext.putSessionValue()或pageContext.putTransientSessionValue()。

那么如何恢复用户之前访问的页呢?当视图对象执行查询时,Table默认显示视图对象的行集中第一个Range的数据,只有当用户单击分页链接后,OA Framework才会将下一个Range的数据提取到缓存中。视图对象提供了对行集Range的操作,通过以下两个方法:vo.getRangeStart()和vo.setRangeStart()。
vo.getRangeStart()获取当前Range中第一个行在整个行集中的index值,而vo.setRangeStart()通过设置Range的第一个行的index来指定当前的Range。
现在我们就可以很容易的实现保存用户访问页的功能了,当离开查询页时,将VO当前的RangeStart保存到Transaction或Session中,当用户返回查询页时,就可以在VO查询后,通过调用setRangeStart()方法,设置为之前保存的RangeStart。

补充:

API上对于putTransactionTransientValue(),putTransientValue()的解释如下:

putTransactionTransientValue()

Puts a transient value on the transaction. These values will be cleared when the root application module is released back to the application module pool.

Transient transaction values will persist only within the JVM. Transient values will not persist across JVMs nor beyond the servlet session scope. Transient transaction values will also be cleared when the root appliction module is recycled for use by another user thread.

putTransactionValue()

Puts a value on the transaction. These values will be cleared when the root ApplicationModule is released back to the application module pool.

由此可见,区别在于Transient这个关键字上,按照Java中对于Transient这个关键词的解释就是:

transient变量的值不会被写入到对象流中,由transient修饰的变量在序列化时不保存状态,也可以说不能被持久化,因为在对象传输的情况下,有些域是"瞬时的",也就是说只与当前进程环境相关,出了这个进程就没有意义了,这样的域是"本地化的",没有序列化的价值,标为瞬时态的.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值