DT编译成功了,Struts Menu从数据库取数据组建菜单的试验成功了......
这几天又开始做技术实验了,被折磨的有点情绪化,不过一切还算顺利,多亏朋友们的帮忙!
昨晚在家读DisplayTag的源代码,发现DisplatyTag(以下简称DT)翻页时候不是从缓存中读取的数据,它又重新向数据库发出请求,和我调试程序时发现的一样,它的动作大致是这样的:
向数据库发送请求,一次读取所有数据的所有字段(我强调"所有"字段,并不是select *,而是读取你的语句中指定的全部的字段,我强调的是相对于lazy-load方式的部分读取),然后根据pagesize(一页显示数据的行数)和当前页号读取数据的子集,当翻到其他页时,又获取所有数据的所有字段,再过滤出显示的子集......,这样的效率不是差,而是很差,我昨天看了一下DT的JIRA的文字,发现这个问题早在2004年的5月份就有人提出了,而那个人就是ValueList的作者,而且你还会发现很多开发者提供的改进方案和参考实现,而且DT的开发组也同意添加提高分页效率的特性,但到现在也还没有实现,有些让人失望!据说ValueList对这方面做的很好,但ValueList的文档太少了,而且集成到AppFuse中还要自己改写模板,目前有些骑虎难下,明天开始折腾ValueList,希望一切顺利,菩萨保佑,呵呵
今天试了一下从数据库中读取数据来生成Struts Menu的菜单,结果发现如果一页中放入2个Struts Menu的菜单,则会有一个有问题,我看了一下源码,发现是在一个js文件中的函数引起的,Struts Menu首先初始化菜单,然后扩展,在扩展的时候,把点击的菜单写到Cookies中,如果同一个页面有2个的声明,则第二个菜单的折叠的部分不能展开,我的一个同事折腾了将近一周,就是因为这个问题。
昨晚终于在倦兔的帮助下,使用Maven编译DT成功了,这样我可以放心的修改DT,然后编译、打包。但我要权衡一下和改用ValueList的工作量,目前暂不打算修改DT了。
Maven把所有下载的jar文件放在Window的Documents and Settings/你的用户名/.mave目录下,你可以把其他人的这个目录下的文件都拷贝过来(注意要保持原来的目录结构)直接用就行了。
Matt Raible关于DT、ValueList、DataGrid的简短介绍:http://raibledesigns.com/comments/rd/sunsets/there_s_a_new_sorting
兔八哥
2005-3-1 18:21
|