logo资料库

兔八哥ValueList的文档0.3.doc

第1页 / 共23页
第2页 / 共23页
第3页 / 共23页
第4页 / 共23页
第5页 / 共23页
第6页 / 共23页
第7页 / 共23页
第8页 / 共23页
资料共23页,剩余部分请下载后查看
版本说明:
版本
日期
译者
说明
0.1
2005-3-4
兔八哥
翻译了ValueList网站提供的文档
0.2
2005-4-12
兔八哥
翻译了在Struts或其他框架中使用ValueList
0.3
2005-5-30
兔八哥
修改了0.2版本中的2处错误。
概述
配置
得到service的实例
准备调用service
从服务中请求ValueList
内置的adapter
在MVC框架中怎么使用ValueList
得到service的helper的实例
“刷新”按钮问题的解决方案
例子
Hibernate20Adapter的文档
属性
配置文件的例子:
Filter
Focusing
Validator
ValueList的Tutorial
第一步 配置文件
第二步 创建定制的适配器
第三步 建立你的Action类
第四步 创建视图
总结
兔八哥翻译的 ValueList 帮助 版本:0.3 文档说明: 本文档译自 ValueList 的官方网站的文档,因为 ValueList 的文档很少,所以我把他开放, 供大家参考,我的项目最近准备使用 ValueList,如果您有好的建议或者忠告,请不吝赐教, 谢谢! 如果您发现文档中有任何错误或者建议,请发送邮件至:ltf_ty2001@yahoo.com.cn,或 者到我的 Blog 留言:rabbit8.bokee.com 谢谢! 版权说明: 兔八哥 2005 年 4 月 7 日 12:52 北京 本文版权归原作者所有,在免费、且无任何附加条件的前提下,可在网络媒体中自由传 播。 版本说明: 版本 0.1 日期 2005-3-4 译者 兔八哥 说明 翻译了 ValueList 网站提供的文档 0.2 2005-4-12 兔八哥 翻 译 了 在 Struts 或 其 他 框 架 中 使 用 ValueList 0.3 2005-5-30 兔八哥 修改了 0.2 版本中的 2 处错误。 兔八哥 2005 年 9 月 13 日 北京 第 1页 共 23页 rabbit8.bokee.com
兔八哥翻译的 ValueList 帮助 版本:0.3 ValueList 的 OverView 概述 在很多情况下,使用 JDBC 是很繁琐的,有很多方法可以替换 JDBC,比如 JDO、Hibernate 等。 即使在从 service 中接收 POJO 的 List 的解决方案中,我们仍然鼓励使用 ValueListHandler 来统一访 问所有的 service。在这种情况下,你应该实现自己的 ValueListAdapter,它的作用是调用你的业务方法, 同时也要把查询结果转换为一个 ValueList。 配置 mlavwilson.properties 文件是 ValueListHandler 服务标签库的配置文件,它包含了定制外观和定制 属性的一些配置。但是,这个文件现在已经不再推荐使用了。 对于在 Web 下怎么使用 Spring,请看 www.springframework.org/docs/reference/beans.html。 下面这个文件是例子中的配置文件: 上面配置文件中的 bean“valueListHandler”是一个服务,这个服务有用于 valueListHandler 的 adapter 的 map,使用 Spring 关联 adapter,可以使这些 adapter 以统一的方式配置。下图是一个真实项 目的配置文件: 第 2页 共 23页 rabbit8.bokee.com
兔八哥翻译的 ValueList 帮助 版本:0.3 第 3页 共 23页 rabbit8.bokee.com
兔八哥翻译的 ValueList 帮助 版本:0.3 怎么使用 service? 上文简述了怎么向 valueListHandler 中添加 adapter 和 query,从例子中的配置片断中你可以看到有 一个叫做"nbaTeams"的 adapter,它是从 team 表中 select 数据的查询。通过这个查询,我们将逐步解决 查询返回的数据。 得到 service 的实例 ValueListHandler 是一个接口,所以你要实现它。在 Web 环境中,最简单的获取 ValueListHandler 的方法是使用 Spring 来获取。 准备调用 service 在服务被调用之前,必须创建 ValueListInfo,它包含下面的内容: Filter 排序列 构造查询的 Map 用于排序的列(一个或者多个) 排序方向 用于排序的方向(一个或者多个列) 页号 当前页号,如果为空的话,则 service 会设置它 总记录数 调用后,被 server 设置 行数/页 每页上显示的记录的行数 条件的属性 用于指定条件查询的属性名,相当于列名 条件的值 指定条件的值,相当于指定的列的值 创建 info 对象,按照“team”列排序 从服务中请求 ValueList 这个方法将返回一个 ValueList,它包含一个 List 和传给 service 的 info。ValueList 也是一个 Iterator,下面是接收它的方法: 1. 第一个参数是 adapter 的名字,上面的代码中的 adapter 的名字是“nbateams”,这个 adapter 在上面 的 xml 文件中已经配置好了。 2. adapter 用于从数据库中接收数据。作为“ValueListHandler”配置中的 adapter,它必须实现 ValueListAdapter 接口。 第 4页 共 23页 rabbit8.bokee.com
兔八哥翻译的 ValueList 帮助 版本:0.3 3. 现在 service 已经有数据了。service 还有一个机会去更改 ValueList:如果 service 想对数据进行排 序、分页、过滤,它可以使用 adapter 的方法 getAdapterType。这样如果需要,adpater 就可以代理 分页、排序、过滤等功能。 4. service 返回 ValueList。 第 5页 共 23页 rabbit8.bokee.com
兔八哥翻译的 ValueList 帮助 版本:0.3 显示 ValueList: 在 Web 环境下,有一些标签用于显示 ValueList,它们将在以后讨论。显示 ValueList 也有一个 Jtable 的实现。当然我们并不限制你用哪种方式。 标签的例子: 代码说明: 行号 名称 描述 1 2 vlh:root 这个标签是必须的,他是所有 vlh 元素的顶级元素。 vlh:retrieve 它调用 ValueListHandler,并请求 ValueList,然后把 ValueList 0.1.1 传给 vlh:root 标签。 注意:如果你不使用 MVC 的 push 模式的话,应该使用该标签。(push: 是指数据是由数据是由框架推向显示页面的,显示页面并不能主动 取得数据,相对于“拉”) Since 0.1.3 5 vlh:row 这是一个 iterate 标签,它对 ValueList 进行循环显示。 6-11 vlh:column 它指定显示哪个属性(字段)。 0.1.0 0.1.0 更多的细节和示例,请参见 valuelist.war。 内置的 adapter DefaultDynaBeanAdapter 返回 DynaBean 的一个 ValueList。对于简单的程序或者例子来说,它是很有用 的。但我们不推荐你在真正的程序里面使用它。 DefaultDynclassAdapter 返回 Dynclass 的一个 ValueList。对于简单的程序或者例子来说,它是很有 用的。但我们不推荐你在真正的程序里面使用它。 DefaultWrapperAdapter 返回封装了 ResultSet 的 ValueList,我推荐在在下列情况下使用:Hibernate 的 HQL 太复杂,不能控制所有的复合连接。 FileSystemAdapter 返回 FileInfo 的 ValueList,在 Web 上浏览一个文件系统时,它是很有用的。 Hibernate20Adapter 返回 POJO 的 ValueList。它也能返回指定条件的一条记录。 除了 FileSystemAdapter,其他的 adapter 都可以调用行的校验。 你可以在 Hibernate20Adapter 找到简单的用法。 第 6页 共 23页 rabbit8.bokee.com
兔八哥翻译的 ValueList 帮助 版本:0.3 在 MVC 框架中怎么使用 ValueList 这部分的主要目的是要解决“刷新按钮问题”(就是点击“刷新”按钮引起的问题)。 在 Web 程序中,你可能常常 redirect 到一个“view”上,并且要保证不能丢失分页、排序、查询条件的信 息(focus:在原文中多次出现“focus”,按照上下文的理解应该是按照指定条件进行查询的意思)。 请考虑下面的情况: 你要删除一条数据,如果你是通过向请求字符串中添加一个转向参数(注:这个请求类似于: http://localhost:8080/jbxx.do?method=delete&id=123456)来实现的话,可能在删除数据后,转向到一 个显示结果的 jsp。但是如果用户点击“刷新”按钮,则还会提交同样的请求。(注:我在使用 AppFuse 的 过程中也遇到这样的问题,DisplayTag 没有处理这种情况,所以会执行同样的动作,但是数据已经在前一 步被删除了,所以数据库会报错,我使用 Struts 的 saveToken 的方法来解决了这个问题,但我发现 AppFuse 的原来的用户部分就不会报这个错误,后来发现它转向的视图还是当前页面,所以没有这个问题。)。 所以,我们需要实现一个 service helper 类来解决这个问题。 得到 service 的 helper 的实例 ValueListHandlerHelper 是在设置任何 ValueListHandler 实现前必须创建的一个类,在 Web 环境下, 最简单的办法是使用 Spring 的 bean Factory 来创建它。 下一步是告诉你的 Controller 你要使用哪个 service 的 helper 类的实例。 “刷新”按钮问题的解决方案 现在,我们来关注更多的细节,设想一下: 在 jsp 中,我们有一个 id="MyTable".的表,Struts 的 Controller 的代码可能如下: 第 7页 共 23页 rabbit8.bokee.com
兔八哥翻译的 ValueList 帮助 版本:0.3 首先,我们必须得到 ValueList 的实际的 info,我们可以修改它,然后,把它备份到 Session 中。 如果请求中没有任何 id=”MyTable”的 Table 的信息,它会试着从上一个保存的备份 (ValueListInfo)中获取。因此,在执行每个 Action 后,必须备份 ValueList 的 info。 更多的信息,请参见:  javadoc for the ValueListHadlerHelper 或者看  source the code of this struts's controller 或者看例子  valuelist.war 的下面的部分: '经过 MVC 的 ValueListHandlerHelper 备份 ValueListInfo 到 session 中'。 例子 如果你想找一个好的、使用 ValueList 的例子的话,请参见 Fantasy Sports Components 的配置文件。 这个文件里面有一个叫做“playerRank”的查询,这个查询有 left join, inline view 和大量的 group by, 它使用的是 DefaultDynaBeanAdapter。 2005-03-04 13:36 第 8页 共 23页 rabbit8.bokee.com
分享到:
收藏