1.7 前台信息显示设计
1.7.1 信息显示概述
信息显示是本系统要实现的主要功能之一,根据需求分析与系统设计,在前台要实现3种显示方式——首页信息的列表显示、某类别中所有信息的列表显示和某信息详细内容的显示。下面分别对这3种显示方式进行介绍。
1.首页信息的列表显示
该显示实现的效果是:以超链接方式显示信息的标题,单击这些超链接可以查看该信息的详细内容。该显示方式将付费信息与免费信息进行分类显示。对于所有类别的付费信息按照信息的发布时间降序排列显示,如图1.31所示;对于免费信息,进行归类显示,并且每一类中按照信息的发布时间降序排列显示前5条记录,如图1.32所示。
2.某类别中所有信息的列表显示
该显示实现的效果是:显示出该类别中所有信息的详细内容。该显示方式同样将付费信息与免费信息进行分类显示,并且对所有已通过审核的付费信息与所有已通过审核的免费信息都按照信息的发布时间降序排列显示。当用户单击导航栏中的超链接后,就会通过该方式显示信息,如图1.33所示。
3.某信息详细内容的显示
该显示方式实现的效果是:显示选择的某信息的详细内容。当用户单击信息标题超链接后,就会显示该信息的详细内容,如图1.34所示。
对于前台的信息显示,应该显示已通过审核的信息;对于免费信息的列表显示,要进行分页的显示。
1.7.2 信息显示技术分析
按照1.7.1节介绍的3种显示方式,下面分别介绍各种方式的实现技术。
1.首页列表显示技术分析
首页的信息显示又分为付费信息的显示与免费信息的显示,下面分别介绍。
? 实现付费信息显示的技术分析。
该技术要实现的是以超链接形式显示出数据库中所有已付费信息的标题。要实现这样一个目的,可先按照用户访问、程序处理、页面显示这样的程序流程进行反向分析。
(1)先来考虑如何在JSP页面中输出信息。可设想将需要显示的已付费信息都存在一个List集合对象中,则在页面中可通过Struts 2.0的iterator标签遍历这个集合,然后再使用property标签输出信息,实现信息的列表显示。
(2)接下来考虑如何在程序中生成这样的List集合对象。因为信息都以记录形式保存在数据库中,要在页面中显示信息,就必须先查询数据库获取符合已付费条件的记录,然后依次将每条记录封装到对应的JavaBean中,最后创建一个List集合对象存储这些JavaBean。这个过程实际上就是将信息从以记录存储的形式转换为通过JavaBean进行封装的过程,如图1.35所示。
(3)最后考虑如何生成SQL查询语句。查询数据库获取所有显示在前台的已付费信息,需要两个条件——已通过审核和已付费。这两个条件都是已知的,不需要从请求中获取,所以当用户访问首页时,可直接在处理类中生成SQL语句。
? 实现免费信息显示的技术分析。
该技术要实现的是以超链接形式显示出每个类别中最新发布的前5条免费信息的标题。在实现显示之前,同样可采用实现付费信息显示的技术分析,但在分析第(2)步的List集合对象中存储的不是JavaBean,而是另外一个List集合对象,在这个List集合对象中存储的是封装信息的JavaBean,如图1.36所示。这样存储信息,是为了在页面中进行归类显示免费信息,显示的效果如图1.32所示。
2.某类别中所有信息的列表显示技术分析
该技术要实现的是列表显示该类别下所有已通过审核的信息的详细内容。它与首页付费信息显示技术的实现是相同的,只不过在页面中显示的是信息的详细内容,这只需通过property标签输出JavaBean中所有属性值即可实现。
3.某信息详细内容显示技术分析
该技术要实现的是显示被选中信息的详细内容。与之前实现列表显示技术不同的是,这里不需要List集合对象,因为只显示一条记录,可直接将查询到的信息封装到JavaBean对象中后,在响应的页面中通过property标签输出。此时property标签的应用与列表显示中property标签的使用是不同的,主要体现在标签的value属性值的设置上。
4.信息列表显示中的分页技术分析
在列表显示信息时,必须要考虑分页的实现,因为本系统是通过数据库分页查询的方法实现的。数据库分页是指通过查询语句从数据库中查询出某页所要显示的数据。例如,某一数据表中有10条记录,若以每页4条记录来进行显示,若要显示第2页信息,则只需查询从第5条开始到第8条的所有记录。
例如,某数据表存在一个名称为id的字段。将其设置为自动编号,这样数据表中的记录就会以该字段递增排列。若对该表进行分页查询,可使用如下查询语句,查询出只在当前页中需要显示的所有记录。
select top m * from tb_table where id>(select MAX(id) from(select top (n-1)*m (id) from tb_table) as maxid)
其中,n为当前页码;m为每页显示的记录数;id是一个被设为自动递增的字段名;select top(n-1)*
m (id) from tb_table子查询语句表示从tb_table表中查询出第n页前的所有记录;select MAX(id) from(子查询语句1)as maxid表示从子查询语句1中查询出字段id中的最大值。所以整个SQL语句表示:在tb_table表中,以id字段的内容大于一个指定值的记录为起点,查询出前m条记录,该指定值为前n-1页中id字段内容中的最大值。
% 注意:查询第一页中的记录,应使用select top m * from tb_table语句。
本系统是按照信息的发布时间来显示信息的,最新发布的信息显示在顶部,所以对查询出的记录要按照发布时间进行降序排列。此时分页查询的SQL语句应以信息的发布时间作为分页的条件,而不能再使用设为自动编号的字段了。