最近,真是忙的有点焦头烂额啊!虽然项目的一期已经接近尾声啦,可今天加一点功能,明天又要修改一个bug,搞的我真是郁闷啊!我就搞不懂啦,那些领导们在做需求分析的时候是怎么想的?他们没有考虑到这些后续的功能吗?大家都知道,添加与修改功能模块,要比开发功能模块麻烦很多,即费时又费力。后来一想,其实也不能怪他们,很多情况都是客户提出的要求,没办法,谁让你拿了人家的money了呢!这不,刚刚下来指示,在做页面提交成功后,要加提示信息。于是,开始加功能,我在做代码修改的时候,发现了一个小技巧,现在写出来和大家一起分享一下吧!
大家都知道,JAVA是解释型语言(如:Basic),但严格来说,它是在解释型与编译型语言之间,因为它要先编译撑class字节码文件,然后才能运行。这里就不详细讨论啦,可以去google查相关的资料。下面用一个具体的例子来说明吧!在一个表单页提交成功后,会跳转到列表页,显示成功操作信息,且在5秒钟后消失。整个过程其实很简单,因为我是用JSF做框架,页面的导航是由JSF的配置文件来控制的,我用一个infoBean来存放提示信息,为了与pageBean分离并重用。当我把infoBean的scope设为“request”时,一般情况下是没有问题的。
不过我的页面导航是加了“重定向”的,至于理由,请看我的一篇“在JSF中的页面导航问题”,上面已经解释的很清楚啦。这样,我在列表页就接收不到表单的成功提示信息啦,所以就只好把scope改为“session”啦,不过这样做的结果是,每次我都要做清除提示信息的动作。这样做很麻烦,因为会有很多类似的提示信息。我想了好久,都没有想到一个很好的解决方法。后来在同事的启示下,才把这个问题解决。方法是:在获取列表集合之前(如:ArrayList),做提示信息的清除动作,代码如下(红色部分):
public ArrayList<Archives> getArchivesBrowse() {
InfoBean infoBean = (InfoBean) Utils.getPageBean("#{infoBean}");
infoBean.setSuccessInfo(" "); //清除提交到列表页的提示信息
archivesList = archivesService.searchArchivesListData(this);
return archivesList;
}
有些朋友会觉得奇怪,既然被清除啦,页面怎么会显示出来呢?开始我也不能理解,后来才明白,这归功与JAVA的语言类型(解释型),因为是先显示提示信息,然后才获取列表的数据。就是说,在执行getArchivesBrowse() 方法之前,页面已经通过infoBean.getSuccessInfo()方法得到值, 并显示到页面啦。这样做的好处是,不用跟踪提示信息,并做清除处理啦。哈哈!简单吧!