1.7 前臺(tái)信息顯示設(shè)計(jì)
1.7.1 信息顯示概述
信息顯示是本系統(tǒng)要實(shí)現(xiàn)的主要功能之一,根據(jù)需求分析與系統(tǒng)設(shè)計(jì),在前臺(tái)要實(shí)現(xiàn)3種顯示方式——首頁信息的列表顯示、某類別中所有信息的列表顯示和某信息詳細(xì)內(nèi)容的顯示。下面分別對(duì)這3種顯示方式進(jìn)行介紹。
1.首頁信息的列表顯示
該顯示實(shí)現(xiàn)的效果是:以超鏈接方式顯示信息的標(biāo)題,單擊這些超鏈接可以查看該信息的詳細(xì)內(nèi)容。該顯示方式將付費(fèi)信息與免費(fèi)信息進(jìn)行分類顯示。對(duì)于所有類別的付費(fèi)信息按照信息的發(fā)布時(shí)間降序排列顯示,如圖1.31所示;對(duì)于免費(fèi)信息,進(jìn)行歸類顯示,并且每一類中按照信息的發(fā)布時(shí)間降序排列顯示前5條記錄,如圖1.32所示。
2.某類別中所有信息的列表顯示
該顯示實(shí)現(xiàn)的效果是:顯示出該類別中所有信息的詳細(xì)內(nèi)容。該顯示方式同樣將付費(fèi)信息與免費(fèi)信息進(jìn)行分類顯示,并且對(duì)所有已通過審核的付費(fèi)信息與所有已通過審核的免費(fèi)信息都按照信息的發(fā)布時(shí)間降序排列顯示。當(dāng)用戶單擊導(dǎo)航欄中的超鏈接后,就會(huì)通過該方式顯示信息,如圖1.33所示。
3.某信息詳細(xì)內(nèi)容的顯示
該顯示方式實(shí)現(xiàn)的效果是:顯示選擇的某信息的詳細(xì)內(nèi)容。當(dāng)用戶單擊信息標(biāo)題超鏈接后,就會(huì)顯示該信息的詳細(xì)內(nèi)容,如圖1.34所示。
對(duì)于前臺(tái)的信息顯示,應(yīng)該顯示已通過審核的信息;對(duì)于免費(fèi)信息的列表顯示,要進(jìn)行分頁的顯示。
1.7.2 信息顯示技術(shù)分析
按照1.7.1節(jié)介紹的3種顯示方式,下面分別介紹各種方式的實(shí)現(xiàn)技術(shù)。
1.首頁列表顯示技術(shù)分析
首頁的信息顯示又分為付費(fèi)信息的顯示與免費(fèi)信息的顯示,下面分別介紹。
? 實(shí)現(xiàn)付費(fèi)信息顯示的技術(shù)分析。
該技術(shù)要實(shí)現(xiàn)的是以超鏈接形式顯示出數(shù)據(jù)庫中所有已付費(fèi)信息的標(biāo)題。要實(shí)現(xiàn)這樣一個(gè)目的,可先按照用戶訪問、程序處理、頁面顯示這樣的程序流程進(jìn)行反向分析。
(1)先來考慮如何在JSP頁面中輸出信息??稍O(shè)想將需要顯示的已付費(fèi)信息都存在一個(gè)List集合對(duì)象中,則在頁面中可通過Struts 2.0的iterator標(biāo)簽遍歷這個(gè)集合,然后再使用property標(biāo)簽輸出信息,實(shí)現(xiàn)信息的列表顯示。
(2)接下來考慮如何在程序中生成這樣的List集合對(duì)象。因?yàn)樾畔⒍家杂涗浶问奖4嬖跀?shù)據(jù)庫中,要在頁面中顯示信息,就必須先查詢數(shù)據(jù)庫獲取符合已付費(fèi)條件的記錄,然后依次將每條記錄封裝到對(duì)應(yīng)的JavaBean中,最后創(chuàng)建一個(gè)List集合對(duì)象存儲(chǔ)這些JavaBean。這個(gè)過程實(shí)際上就是將信息從以記錄存儲(chǔ)的形式轉(zhuǎn)換為通過JavaBean進(jìn)行封裝的過程,如圖1.35所示。
(3)最后考慮如何生成SQL查詢語句。查詢數(shù)據(jù)庫獲取所有顯示在前臺(tái)的已付費(fèi)信息,需要兩個(gè)條件——已通過審核和已付費(fèi)。這兩個(gè)條件都是已知的,不需要從請(qǐng)求中獲取,所以當(dāng)用戶訪問首頁時(shí),可直接在處理類中生成SQL語句。
? 實(shí)現(xiàn)免費(fèi)信息顯示的技術(shù)分析。
該技術(shù)要實(shí)現(xiàn)的是以超鏈接形式顯示出每個(gè)類別中最新發(fā)布的前5條免費(fèi)信息的標(biāo)題。在實(shí)現(xiàn)顯示之前,同樣可采用實(shí)現(xiàn)付費(fèi)信息顯示的技術(shù)分析,但在分析第(2)步的List集合對(duì)象中存儲(chǔ)的不是JavaBean,而是另外一個(gè)List集合對(duì)象,在這個(gè)List集合對(duì)象中存儲(chǔ)的是封裝信息的JavaBean,如圖1.36所示。這樣存儲(chǔ)信息,是為了在頁面中進(jìn)行歸類顯示免費(fèi)信息,顯示的效果如圖1.32所示。
2.某類別中所有信息的列表顯示技術(shù)分析
該技術(shù)要實(shí)現(xiàn)的是列表顯示該類別下所有已通過審核的信息的詳細(xì)內(nèi)容。它與首頁付費(fèi)信息顯示技術(shù)的實(shí)現(xiàn)是相同的,只不過在頁面中顯示的是信息的詳細(xì)內(nèi)容,這只需通過property標(biāo)簽輸出JavaBean中所有屬性值即可實(shí)現(xiàn)。
3.某信息詳細(xì)內(nèi)容顯示技術(shù)分析
該技術(shù)要實(shí)現(xiàn)的是顯示被選中信息的詳細(xì)內(nèi)容。與之前實(shí)現(xiàn)列表顯示技術(shù)不同的是,這里不需要List集合對(duì)象,因?yàn)橹伙@示一條記錄,可直接將查詢到的信息封裝到JavaBean對(duì)象中后,在響應(yīng)的頁面中通過property標(biāo)簽輸出。此時(shí)property標(biāo)簽的應(yīng)用與列表顯示中property標(biāo)簽的使用是不同的,主要體現(xiàn)在標(biāo)簽的value屬性值的設(shè)置上。
4.信息列表顯示中的分頁技術(shù)分析
在列表顯示信息時(shí),必須要考慮分頁的實(shí)現(xiàn),因?yàn)楸鞠到y(tǒng)是通過數(shù)據(jù)庫分頁查詢的方法實(shí)現(xiàn)的。數(shù)據(jù)庫分頁是指通過查詢語句從數(shù)據(jù)庫中查詢出某頁所要顯示的數(shù)據(jù)。例如,某一數(shù)據(jù)表中有10條記錄,若以每頁4條記錄來進(jìn)行顯示,若要顯示第2頁信息,則只需查詢從第5條開始到第8條的所有記錄。
例如,某數(shù)據(jù)表存在一個(gè)名稱為id的字段。將其設(shè)置為自動(dòng)編號(hào),這樣數(shù)據(jù)表中的記錄就會(huì)以該字段遞增排列。若對(duì)該表進(jìn)行分頁查詢,可使用如下查詢語句,查詢出只在當(dāng)前頁中需要顯示的所有記錄。
select top m * from tb_table where id>(select MAX(id) from(select top (n-1)*m (id) from tb_table) as maxid)
其中,n為當(dāng)前頁碼;m為每頁顯示的記錄數(shù);id是一個(gè)被設(shè)為自動(dòng)遞增的字段名;select top(n-1)*
m (id) from tb_table子查詢語句表示從tb_table表中查詢出第n頁前的所有記錄;select MAX(id) from(子查詢語句1)as maxid表示從子查詢語句1中查詢出字段id中的最大值。所以整個(gè)SQL語句表示:在tb_table表中,以id字段的內(nèi)容大于一個(gè)指定值的記錄為起點(diǎn),查詢出前m條記錄,該指定值為前n-1頁中id字段內(nèi)容中的最大值。
% 注意:查詢第一頁中的記錄,應(yīng)使用select top m * from tb_table語句。
本系統(tǒng)是按照信息的發(fā)布時(shí)間來顯示信息的,最新發(fā)布的信息顯示在頂部,所以對(duì)查詢出的記錄要按照發(fā)布時(shí)間進(jìn)行降序排列。此時(shí)分頁查詢的SQL語句應(yīng)以信息的發(fā)布時(shí)間作為分頁的條件,而不能再使用設(shè)為自動(dòng)編號(hào)的字段了。