现在的问题是怎么样来区别上面1>、2>、3>中列出的各种情况,并调用对应的“getPreNextNaviStr”方法来产生正确的上一条、下一条的URL导航字符串呢?
我的答案是根据当前页面的封装导航字符串来确定,
我通过分析上面1>、2>、3>中列出的各种情况的导航字符串的特征码,然后在程序中通过检索特征码来确定当前页面的层次导航位置(对应于上面不同的几种情况),这是一个烦琐的过程,这里仅列举一二:
例如:在检索目标的列表中的目标页面中的封装导航串一定会含有“ae”两个字符,且帖子类型为“目标”;在检索日记的列表中的日记页面中的封装导航串一定会含有“ad”两个字符,且帖子类型为“日记”。
(2)、确定在哪几个Struts的Action中需要处理上一条、下一条导航:
1)、首先,需要导航的地方有三种情况:
1>、目标内容
2>、日记内容
3>、目标的日记列表
2)、
1>、1)的1>和2>需要放在DisGoalContentAction.
java(/WEB-INF/src/com/learndiary/website/action/disgoal/DisGoalContentAction.
java)中处理;
2>、1)的3>需要分在几个地方处理,分别是:
1>检索目标的日记列表,所有目标的日记列表,进行、完成、退出的日记列表:在DiaryAction.
java(/WEB-INF/src/com/learndiary/website/action/disdiary/DiaryAction.
java)中处理;
2>进行、完成、退出的
我的日记列表:在MyDiaryAction.
java(/WEB-INF/src/com/learndiary/website/action/mydiaries/MyDiaryAction.
java)中处理;
(3)、在页面上显示上一条、下一条导航的URL字符串;
在需要上一条、下一条导航的页面上,把从request中获得的属性“preNextNavigation”显示在页面的右上部和右下部就行了。
上一条、下一条导航完整的设计分析过程见
我上面提到的第二篇日记:“分析学习日记横向导航及开几个窗口的思路”(http://www.learndiary.com/disDiaryContentAction.do?searchDiaryID=&goalID=1167&naviStr=a10a2506ah1128 )。
3、父帖与子帖列表的双向导航的实现过程:
1)列出导航需求列表:
(1)“目标<──>目标下的所有日记列表”的双向导航;
(2)“目标<──>目标下
我的日记列表”的双向导航;
2)分析实现双向导航所需的参数:
只需要目标的ID或日记列表的目标ID和导航封装字符串;
3)确定实现方法:
直接在Action中得到当前目标的ID或日记列表的目标ID和导航封装字符串,附在“***Action.do?”的后面就行了。
4)进行双向导航的设计:
(1)、确定在哪几个Struts的Action中需要处理双向导航:
1>、在“目标──>目标下的所有日记列表”和“目标──>目标下
我的日记列表”的导航,需要放在DisGoalContentAction.
java(/WEB-INF/src/com/learndiary/website/action/disgoal/DisGoalContentAction.
java)中处理;
2>、在“目标下的所有日记列表──>目标”的导航,需要放在DiaryAction.
java(/WEB-INF/src/com/learndiary/website/action/disdiary/DiaryAction.
java)中处理;
3>、在“目标下的
我的日记列表──>目标”的导航,需要放在在MyDiaryAction.
java(/WEB-INF/src/com/learndiary/website/action/mydiaries/MyDiaryAction.
java)中处理;
(2)、在页面上显示双向导航的URL字符串:
在需要“目标──>目标下的所有日记列表”和“目标──>目标下
我的日记列表”的导航的页面上,把从request中获得的属性“jumpToViewDiaries”显示在页面的右上部和右下部;在“目标下的所有日记列表──>目标”和“目标下的
我的日记列表──>目标”的导航中,把从request中获得的属性“jumpToViewGoal”显示在页面的右上部和右下部就行了。
四、总结: 1、心得:
1)、编码前的分析设计是非常重要的,这一步工作做好了,编码就很容易了(但
我还做得不够,如下面的第3)条心得。可是,也许是
我的水平有限,有些应该放在设计时的工作不到编码的时候就是想不到,还望大家给予指点);
2)、Struts框架把程序的逻辑实现代码和页面显示部分能比较好的分离,有利于功能模块的新增和程序的后期维护;
3)、在进行类和类的方法的设计时(如前面提到的Pager类和PageDB类),没有先进行完整的高层设计,是采用边编码边设计的方式,致使类的设计不够面向对象,给后期的理解和维护会造成困难;
4)、如果这种导航设计思路真的有用,有必要把它进行精心的设计,做成插件的形式,这样可以把它方便的应用于需要这种动态导航的各种
java的web程序中;
2、这种动态导航的优点:
1)、能够极大的提高用户的浏览体验,使网站的导航更符合逻辑和人们的思维习惯;
2)、能够无限的进行需要导航的页面的增加和减少,后期的维护代码少量增加就行了;
3、这种动态导航的缺点:
1)、实现过程较为复杂,牵涉的页面和逻辑代码较多,权衡实现的代价和收到的效果,真的值得吗?;
2)、动态导航能被用户的使用习惯接受吗?这是一个未知数;
3)、还有什么缺点呢?暂时还没有想出来,大家帮
我们想一想吧。