熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java開源技術 >> 正文

Struts網站導航系統設計新思路探討

2013-11-23 20:22:51  來源: Java開源技術 
提綱
  
  一背境
  
  二需求分析
  1學習日記網站的主要功能頁面結構
  2需要進行動態導航的主要模塊
  3需求的提出
  1)層次導航的需求
  2)同一列表中帖子間的導航(即上一條下一條類似的導航)
  3)父帖與子帖列表的雙向導航
  
  三具體實現過程
  1層次導航的實現過程
  1)列出導航功能需求列表看都有哪些導航路徑
  2)分析定位特定類型的頁面所需的參數
  3)確定層次導航的實現方法
  4)進行層次導航系統的設計
  (1)進行頁面節點導航封裝字符串格式的設計
  (2)頁面完整導航字符串的設計
  (3)將封裝的導航字符串還原為顯示在頁面上的URL地址導航條
  (4)在頁面上顯示層次導航的URL字符串
  2同一列表中帖子間的導航(即上一條下一條類似的導航)的實現過程
  1)列出導航需求列表
  2)分析實現上一條下一條導航所需的參數
  3)確定實現上一條下一條導航的實現方法
  4)進行上一條下一條導航的設計
  (1)根據層次導航的導航字符串確定上一條下一條導航所在的層次導航位置
  (2)確定在哪幾個Struts的Action中需要處理上一條下一條導航
  (3)在頁面上顯示上一條下一條導航的URL字符串
  3父帖與子帖列表的雙向導航的實現過程
  1)列出導航需求列表
  2)分析實現雙向導航所需的參數
  3)確定實現方法
  4)進行雙向導航的設計
  (1)確定在哪幾個Struts的Action中需要處理雙向導航
  (2)在頁面上顯示雙向導航的URL字符串
  
  四總結
  1心得
  2優點
  3缺點
  
  關鍵詞學習日記 Struts 動態導航 學習日記動態導航技術(簡稱LDDN技術 ) 學習日記開發小組(簡稱LDDG )
  
  ××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
  
  正文
  
  一背境

  
  學習日記( )網站是采用Struts框架的開源項目learndiary( )的實際運行示范站點目前由學習日記開發小組進行開發致力於以JAVA技術構建一個普遍適用的開源網絡學習交流平台為了改善用戶的浏覽體驗故提出導航系統的改善計劃已經包含了這個導航系統的的最新版本為learndiaryV本文所提到的程序均可以在本站的下載菜單中獲取: 本文希望起到一個拋磚引玉的作用引發一場關於java技術構建的web系統的導航系統設計的討論
  
  基本思路
  
  1學習日記網站的主要功能頁面結構
  
  核心為目標列表-》目標內容及評論-》目標下的日記列表-》日記內容及評論
  
  (示意圖_//gif )
  
  2需要進行動態導航的主要模塊
  
  需要進行動態導航的主要模塊有3個見學習日記網站的菜單欄
  
  1)所有目標;naviStr=a (顯示學友提出的所有學習目標列表 )
  
  2)檢索 (檢索本站的所有學習目標和學習日記 )
  
  3)您的目標;pageNum=&naviStr=aa (學友自己的學習目標歸類包括進行中的目標退出的目標已完成的目標 )
  
  3需求的提出
  
  1)層次導航的需求
  
  我們想建成一個導航系統它可以跟蹤用戶在系統中浏覽頁面的過程每浏覽到一個新的頁面就在導航條中加入這個頁面的URL於是當用戶浏覽到別的頁面可以點擊返回系統導航條中的前面浏覽過的頁面當浏覽一個頁面是與導航條中已經存在的頁面類型一致時就截去導航條中此類型頁面後面的導航URL
  
  征對這個需求我大概看了一下動網的實現方式和phpWind論壇的實現方式他們用的導航基本上是靜態的也就是說一種頁面上的導航條是固定的例如顯示一條帖子的內容他們的方式是論壇首頁-》論壇版塊-》主題內容
  
  而我們的需求是例如顯示一篇日記的內容
  
  在所有目標模塊中導航條為所有目標>>日記列表>>日記內容(圖例_//gif )
  
  在檢索模塊中導航條為所有目標>>檢索>>檢索日記列表>>日記內容(圖例_//gif )
  
  在您的目標中導航條為所有目標>>我進行中的目標>>本目標我的日記列表>>日記內容(圖例_//gif )
  
  2)同一列表中帖子間的導航(即上一條下一條類似的導航 )
  
  另外除了上面層次導航的需求同一列表中帖子間的導航(即上一條下一條類似的導航 )我們也想在網上一般的導航系統的基礎有所改良例如在一般的導航系統中如果你在檢索結果的列表中點擊查看一篇帖子然後你再點擊這篇帖子的上一條和下一條鏈接新點開的頁面不是檢索結果列表中的上一篇或下一篇帖子而是這條帖子所有的版塊的上一條和下一條帖子
  
  我們需要在檢索結果列表中點擊檢索到的一篇日記中的上一條下一條鏈接時顯示的是檢索結果列表中本日記的上一條和下一條日記
  
  例如我們以中文顯示為關鍵字檢索日記得到一個檢索結果列表(圖例_//gif )
  
  當我點擊查看解決:jsp頁面中文顯示問題這篇日記中的下一條鏈接時我們需要打開檢索結果列表的下一篇日記問題jsp中文顯示<c:set>的值可否是對象?me (圖例_//gif )而不是解決:jsp頁面中文顯示問題這篇日記所在的目標中的下一篇日記
  
  在您的目標這個模塊中的上一條下一條的導航同樣存在在檢索頁面中點擊上一條下一條鏈接的問題
  
  3)父帖與子帖列表的雙向導航
  
  學習日記征對自身的功能結構特點還需要實現目標<──>目標下的所有日記列表的雙向導航和目標<──>目標下我的日記列表的雙向導航顯示目標內容(圖例_//gif )您可以看到頁面右邊中上有兩個鏈接分別是查看所有日記查看我的日記點擊查看所有日記鏈接出現的是頁面(圖例_//gif )點擊查看我的日記鏈接出現的是頁面(圖例_//gif )後面這兩個頁面的右中上部又都有到日記所在的目標中的鏈接查看目標內容
  
  以上總結了學習日記需要實現的導航系統的三個方面的需求征對這個需求我看了一些論壇均沒有現存的東西可以參考於是我們決定探索一種能夠實現上面動態導航需求的方法因為我們實現的導航系統是動態變化的故把這種實現的方法稱之為學習日記動態導航技術(簡稱LDDN技術 )下面把我們的具體設計過程總結一下
  
  具體實現過程
  
  具體的設計分析過程我已經在進行的過程中記錄在日記中了所以如果你要詳細的了解我的分析設計過程的話可以去看這兩篇日記
  
  第一篇日記提高學習日記導航能力的思路(;goalID=&naviStr=aaah主要記錄的是我在對層次導航部分的分析設計過程
  
  第二篇日記分析學習日記橫向導航及開幾個窗口的思路(;goalID=&naviStr=aaah主要記錄的是我在對上一條下一條導航部分的分析與設計過程
  
  當然細節總是太煩瑣和令人不愉快的我把大概的設計過程總結如下
  
  1層次導航的實現過程
  
  1)列出導航功能需求列表看都有哪些導航路徑例如
  
  (5)所有目標列表->相關日記列表->顯示日記內容->編輯評論
  
  (14)所有目標列表->進行中的目標列表->您的日記列表->顯示日記內容->編輯評論
  
  (21)所有目標列表->檢索頁面->搜索結果日記列表->相關日記列表->顯示日記內容->撰寫評論
  
  全部列表請見我上面提到的第一篇日記中的學習日記導航路徑列舉(您可以在頁面中搜索位置前後的雙引號除外下同 )
  
  2)分析定位特定類型的頁面所需的參數(這樣就可以根據頁面類型和參數唯一的確定一個頁面了 )
  
  經過分析唯一定位一個頁面所需要的參數變為
  
  1》頁面類型
  
  2》參數ID
  
  其中參數ID分為下面幾種情況
  
  1》列表需要列表的parentID;
  
  2》單個條目需要它的ID
  
  3》用戶的進行完成等目標列表什麼都不需要用戶ID在Session中
  
  4》用戶的進行完成等目標的用戶日記列表目標ID所需的用戶ID在Session中
  
  5》搜索列表什麼都不需要因為搜索條件字符串已保留在全局Session中了
  
  具體的分析過程請見我上面提到的第一篇日記中的(2 )如何唯一的定位一個特定的頁面呢?
  
  3)確定層次導航的實現方法
  
  當點擊一個新的頁面時就把定位這個頁面所需的參數加入到層次導航的參數鏈表中(鏈表的一個節點儲存的是一個新的頁面的定位參數 )這時鏈表變長當點擊一個在鏈表中已經存在這種類型的頁面(例如顯示一篇日記的內容的頁面 )時就把在導航鏈表中這個節點及後面的節點刪除再加上這個點擊的頁面的定位參數
  
  實現這種層次導航的需求有兩種方法
  
  (1)為每條導航路徑在session中設置一個層次導航所需的屬性在這條路徑上導航鏈表的增長和縮短信息就由這個屬性來維持
  
  (2)把這個鏈表封裝成字符串這個字符串在訪問不同的頁面時會根據上面的思路不斷增長和縮短把這個封裝的字符串連同用戶新請求的頁面的定位參數節點字符串一起傳給請求這個頁面前的Struts的action形成新的頁面上導航條所需的編碼字符串然後把這個編碼字符串保存在request中供請求的頁面中的下一個鏈接使用並同時由action把這個形成的編碼導航字符串解碼處理成用戶請求的頁面上需要的導航字符串
  
  經過分析我決定采用第(2 )種方法來實現層次導航
  
  具體的分析過程請見我上面提到的第一篇日記中的我知道有2種方法可以解決這個問題
  
  4)進行層次導航系統的設計
  
  (1)進行頁面節點導航封裝字符串格式的設計
  
  分隔符(用a作分隔符 )+頁面節點類型(用一位字符代表封裝成一個頁面類型常量類用字符1-9英文字符bz和AZ表示 )+頁面參數ID(如顯示目標的日記列表所需的目標ID顯示日記內容所需的日記ID )如顯示一篇日記的頁面類型常量為字符h那麼顯示解決:jsp頁面中文顯示問題這篇日記內容(ID為292 )這一頁面的封裝字符串為ah
  
  (2)頁面完整導航字符串的設計
  
  在下面的討論中會用到的相關源文件
  
  負責封裝學習日記所需導航的頁面的類型常量(/WEBINF/src/com/learndiary/website/PageTypeConstsjava )
  
  負責導航字符串封裝的方法(/WEBINF/src/com/learndiary/website/util/Pagerjava中的public static String encodeNaviStr(String naviStr char toPageType String parameter) )
  
  當用戶提出一個新的頁面請求把當前頁面中的完整的導航封裝字符串和新的頁面的類型和新請求頁面的參數ID傳給處理新頁面顯示前的Struts中的Action中由Action調用一個方法負責把這些參數組裝成下一新頁面所需的導航字符串當前正顯示的頁面是系統導航所有目標>>我進行中的目標>>目標一起學習Struts(MVC)我的日記列表中的目標一起學習Struts(MVC)我的日記列表(圖例_//gif )你可以看到當點擊顯示日記解決:jsp頁面中文顯示問題 (篇) 的URL中的導航字符串為naviStr=aaa(圖例中左下方紅圈中 )把這個字符串和請求的顯示日記的頁面類型(日記為h )和顯示這篇日記所需的ID( )傳給顯示日記內容前的Action中(disDiaryContentActiondo源文件為/WEBINF/src/com/learndiary/website/action/disgoal/DisGoalContentActionjava )由負責導航字符串封裝的方法(源文件為/WEBINF/src/com/learndiary/website/util/Pagerjava中的public static String encodeNaviStr(String naviStr char toPageType String parameter) )進行處理處理流程為以顯示日記這個頁面的類型ID為h搜索已有導航字符串沒有相同的頁面於是就把這個頁面導航字符串節點(ah )加到完整的導航字符串(aaa)後面得到新的導航字符串(aaaah見例圖(_//gif )你可以看到當點擊日記解決:jsp頁面中文顯示問題這篇日記中的我要評論的URL中的導航字符串為naviStr=aaaah(圖例中左下方紅圈中 )
  
  當點擊當前頁面中的回到上級導航節點的鏈接時系統導航所有目標>>我進行中的目標>>目標一起學習Struts(MVC)我的日記列表中的我進行中的目標這時顯示我進行中的目標頁面的類型代碼是參數ID是那麼以新頁面的節點字符串(a )的類型代碼搜索已有導航字符串已經存在相同的類型代碼於是就把導航字符串中這個節點和後面的所有節點刪除得到字符串a再加上新頁面的節點字符串為a得到顯示我進行中的目標頁面的導航字符串為aa見例圖(_//gif )你可以看到當點擊一起學習Struts(MVC) (篇)這篇目標的URL中的導航字符串為naviStr=aa(圖例中左下方紅圈中 )
  
  詳細分析設計過程我上面提到的第一篇日記中的設計中用到的方法
  
  (3)將封裝的導航字符串還原為顯示在頁面上的URL地址導航條
  
  同樣用上面的顯示在我進行中的目標中目標一起學習Struts(MVC)我的日記列表中的日記解決:jsp頁面中文顯示問題來進行說明也就是說如何把導航封裝字符串aaaah轉換成字符串系統導航<a /learndiary/indexActiondo?searchDiaryID=&pageNum=&naviStr=aaaah>所有目標</a>>><a /learndiary/processGoalActiondo?searchDiaryID=¤tGoalState=&pageNum=&naviStr=aa>我進行中的目標</a>>><a /learndiary/myDiaryActiondo?searchDiaryID=&pageNum=&goalID=&naviStr=aaaah>目標一起學習Struts(MVC)我的日記列表</a>>>日記解決:jsp頁面中文顯示問題<p>
  
  使它在頁面上顯示導航條為系統導航所有目標>>我進行中的目標>>目標一起學習Struts(MVC)我的日記列表>>日記解決:jsp頁面中文顯示問題(見圖例_//gif )?
  
  解決這個問題我用兩步走的方法
  
  <1>用一個方法可以把每一個導航節點的封裝字符串轉換為導航URL字符串主要是根據需要顯示的頁面類型和參數ID來進行轉換實現過程比較簡單請查看源文件中負責解封導航節點封裝字符串的方法(/WEBINF/src/com/learndiary/website/util/Pagerjava中的public static String decodeNodeStr(String naviStr String nodeNaviStr HttpServletRequest request boolean ifLast) throws Exception )
  
  <2>把每個節點封裝的字符串聯接在一起形成完成的頁面層次導航所需的URL字符串根據慣例當前(也就是最後一個節點的導航URL灰化無鏈接 )具體實現請查看源文件中負責解封整個導航封裝字符串的方法(/WEBINF/src/com/learndiary/website/util/Pagerjava中的public static String decodeNaviStr(String naviStr HttpServletRequest request) throws Exception )
  
  具體的分析設計過程請見我上面提到的第一篇日記中的把封裝的字符串轉化為下一個頁面顯示導航條所需要的字符串
  
  (4)在頁面上顯示層次導航的URL字符串
  
  在需要層次導航的頁面上把從request中獲得的屬性navigation顯示在頁面的左上部並把從request中獲得的相應的封裝導航字符串naviStr作為參數附在每一個URL的後面就行了
  
  至此學習動態導航系統中的層次導航部分已經設計完成下面繼續進行顯示上一條下一條的水平導航部分的探索
  
  2同一列表中帖子間的導航(即上一條下一條類似的導航 )的實現過程
  
  1)列出導航需求列表
  
  (1)在所有目標列表中
  
  1>目標內容
  
  2>目標的日記列表(上一條在這裡即上一目標的日記列表)
  
  3>日記列表中的日記內容
  
  (2)在檢索結果頁面中
  
  1>檢索目標列表
  
  <1>目標內容
  
  <2>目標的日記列表
  
  <3>日記列表中的日記內容
  
  2>檢索日記列表
  
  <1>日記內容
  
  <2>所在目標的日記列表中的日記內容
  
  (3)您的進行中的目標列表
  
  1>目標內容
  
  2>目標的全部日記列表
  
  3>目標的我的日記列表
  
  4>目標的全部日記列表中的日記
  
  5>目標的我的日記列表中的日記
  
  2)分析實現上一條下一條導航所需的參數
  
  因為是實現同一列表中的同一級別的帖子之間的導航所以只需要得到需要導航的條目的ID就行了其它所有參數都不必改變
  
  3)確定實現上一條下一條導航的實現方法
  
  現在的問題是如何根據當前條目的ID得到上一條目和下一條目的ID呢?
  
  答案是條目的列表條目在列表中的排序方式當前條目的ID為了在查詢結果集中得到當前條目的前後條目的ID可以有下面的方法
  
  (1)在一個直接操縱數據庫的方法中從查詢結果集中取出每個ID(整型)後保存在數組中馬上關閉數據庫連接減少數據庫連接開銷然後在同個方法中取得前面當前後面記錄的ID只返回這3個元素的數組給Pager類(負責產生頁面導航所需要的URL字符串的工具類)處理這樣可以保證每條數據都是最新的但是要不停的開啟和關閉數據庫連接
  
  (2)把查詢結果產生的數組全部存在session中Pager在session中取數據這樣可以減少數據庫的查詢但是存在兩個問題那個比較長的數組在session中始終占用內存還有取出的數據的排序關系可能是過期的(這時有人往數據庫中增加或修改了數據)
  
  我覺得第一種方法可以減輕對網站虛擬主機資源的壓力決定采用第一種方法
  
  另外在直接操縱數據庫產生的結果集中查詢鄰近的ID會出現幾種結果呢?
  
  這裡用表示沒有相應的帖子
  
  1>在用戶查看帖子期間這篇帖子被刪除了結果返回{-1-1-1}
  
  2>只有一篇符合要求的帖子結果返回{-1當前帖子ID-1}
  
  3>當前帖子是第一篇帖子結果返回{-1當前帖子ID下一條帖子ID}
  
  4>當前帖子是最後一篇帖子結果返回{上一篇帖子ID當前帖子ID-1}
  
  5>當前帖子前後都有帖子結果返回{上一篇帖子ID當前帖子ID上一篇帖子ID}
  
  現在就可以把這個含有前一條當前後一條帖子ID的整型數組傳給Pager類中的產生上一條下一條導航URL字符串的相應方法進行處理了
  
  下面是上一條下一條導航的具體設計
  
  4)進行上一條下一條導航的設計
  
  (1)根據層次導航的導航字符串確定上一條下一條導航所在的層次導航位置
  
  進行上一條下一條的導航需要知道被導航的帖子所在的層次導航的位置例如顯示一篇日記的內容
  
  在所有目標模塊中導航條為所有目標-》日記列表-》日記內容(圖例_//gif )(路徑1)
  
  在檢索模塊中導航條為所有目標>>檢索>>檢索日記列表>>日記內容(圖例_//gif ) (路徑2)
  
  在您的目標中導航條為所有目標>>我進行中的目標>>本目標我的日記列表>>日記內容(圖例_//gif ) (路徑3)
  
  在上一條下一條的導航中層次導航條除了上一條目和下一條目內容的改變其余是不會變的而且要得到當前條目的前後條目的ID在不同的層次導航中是不同的例如在上面的路徑1中得到日記列表的查詢條件是本目標下的所有日記在路徑2中得到日記列表的查詢條件是檢索頁面的條件組合在路徑3中得到日記列表的查詢條件是本目標下的用戶的所有日記而且在學習日記的設計中這三種情況的排序方式是分開的可以由用戶在浏覽時自選的
  
  為了得到不同層次導航下的上一條下一條URL導航字符串我在頁面導航URL字符串產生工具類Pager((/WEBINF/src/com/learndiary/website/util/Pagerjava)中用了3個重載的用於產生上一條下一條導航URL字符串的方法來征對不同的三種情況(與前面說的3種路徑不是一一對應的)分別是
  
  1>(包括對這一路徑下的目標列表中目標的浏覽和目標的日記列表的浏覽和檢索目標列表中目標的浏覽和檢索日記列表中日記的浏覽)public static String getPreNextNaviStr( char toPageType String url HttpServletRequest request String naviStr int currentID String conditionint orderType int direction) throws Exception輸入參數是toPageType請求的頁面類型url請求的頁面的/***Actiondo路徑request請求對象naviStr當前頁面的導航封裝字符串currentID當前條目的IDcondition查詢的where子句orderType排序類型direction排序方向為了分離數據庫訪問的代碼在這個方法中調用了一個直接訪問數據庫的類(/WEBINF/src/com/learndiary/website/db/PageDBjava)中的方法(public int[] getAdjacentIDs(String tableName int currentID String condition int orderType int direction) throws Exception )來得到含有前一條當前後一條帖子ID的數組
  
  2>(包括對檢索日記列表的日記所在目標日記所在目標下的日記列表的浏覽)public static String getPreNextNaviStr(String url HttpServletRequest request String naviStr int searchDiaryID String conditionint orderType int direction) throws Exception輸入參數是url請求的頁面的/***Actiondo路徑request請求對象naviStr當前頁面的導航封裝字符串searchDiaryID搜索日記列表中當前日記的IDcondition查詢的where子句orderType排序類型direction排序方向為了分離數據庫訪問的代碼在這個方法中調用了一個直接訪問數據庫的類(/WEBINF/src/com/learndiary/website/db/PageDBjava)中的方法(public int[] getAdjacentIDs(String tableName int currentID String condition int orderType int direction) throws Exception )來得到含有前一條當前後一條帖子ID的數組
  
  3>(包括對進行中的目標退出的目標完成的目標列表中目標的浏覽)public static String getPreNextNaviStr(String url HttpServletRequest request String naviStr int userID int currentID int myGoalTypeFlag int orderType int direction) throws Exception輸入參數是url請求的頁面的/***Actiondo路徑request請求對象naviStr當前頁面的導航封裝字符串userID當前用戶IDcurrentID當前條目的IDmyGoalTypeFlag用戶目標的類型(進行退出或者完成)orderType排序類型direction排序方向為了分離數據庫訪問的代碼在這個方法中調用了一個直接訪問數據庫的類(/WEBINF/src/com/learndiary/website/db/PageDBjava)中的方法(public int[] getAdjacentIDs(int userIDint currentID int myGoalTypeFlag int orderType int direction) throws Exception)來得到含有前一條當前後一條帖子ID的數組
  
  現在的問題是怎麼樣來區別上面1>2>3>中列出的各種情況並調用對應的getPreNextNaviStr方法來產生正確的上一條下一條的URL導航字符串呢?
  
  我的答案是根據當前頁面的封裝導航字符串來確定我通過分析上面1>2>3>中列出的各種情況的導航字符串的特征碼然後在程序中通過檢索特征碼來確定當前頁面的層次導航位置(對應於上面不同的幾種情況)這是一個煩瑣的過程這裡僅列舉一二
  
  例如在檢索目標的列表中的目標頁面中的封裝導航串一定會含有ae兩個字符且帖子類型為目標在檢索日記的列表中的日記頁面中的封裝導航串一定會含有ad兩個字符且帖子類型為日記
  
  (2)確定在哪幾個Struts的Action中需要處理上一條下一條導航
  
  1)首先需要導航的地方有三種情況
  
  1>目標內容
  
  2>日記內容
  
  3>目標的日記列表
  
  2)
  
  1>1)的1>和2>需要放在DisGoalContentActionjava(/WEBINF/src/com/learndiary/website/action/disgoal/DisGoalContentActionjava)中處理
  
  2>1)的3>需要分在幾個地方處理分別是
  
  1>檢索目標的日記列表所有目標的日記列表進行完成退出的日記列表在DiaryActionjava(/WEBINF/src/com/learndiary/website/action/disdiary/DiaryActionjava)中處理
  
  2>進行完成退出的我的日記列表在MyDiaryActionjava(/WEBINF/src/com/learndiary/website/action/mydiaries/MyDiaryActionjava)中處理
  
  (3)在頁面上顯示上一條下一條導航的URL字符串
  
  在需要上一條下一條導航的頁面上把從request中獲得的屬性preNextNavigation顯示在頁面的右上部和右下部就行了
  
  上一條下一條導航完整的設計分析過程見我上面提到的第二篇日記分析學習日記橫向導航及開幾個窗口的思路(;goalID=&naviStr=aaah
  
  3父帖與子帖列表的雙向導航的實現過程
  
  1)列出導航需求列表
  
  (1)目標<──>目標下的所有日記列表的雙向導航
  
  (2)目標<──>目標下我的日記列表的雙向導航
  
  2)分析實現雙向導航所需的參數
  
  只需要目標的ID或日記列表的目標ID和導航封裝字符串
  
  3)確定實現方法
  
  直接在Action中得到當前目標的ID或日記列表的目標ID和導航封裝字符串附在***Actiondo?的後面就行了
  
  4)進行雙向導航的設計
  
  (1)確定在哪幾個Struts的Action中需要處理雙向導航
  
  1>目標──>目標下的所有日記列表目標──>目標下我的日記列表的導航需要放在DisGoalContentActionjava(/WEBINF/src/com/learndiary/website/action/disgoal/DisGoalContentActionjava)中處理
  
  2>目標下的所有日記列表──>目標的導航需要放在DiaryActionjava(/WEBINF/src/com/learndiary/website/action/disdiary/DiaryActionjava)中處理
  
  3>目標下的我的日記列表──>目標的導航需要放在在MyDiaryActionjava(/WEBINF/src/com/learndiary/website/action/mydiaries/MyDiaryActionjava)中處理
  
  (2)在頁面上顯示雙向導航的URL字符串
  
  在需要目標──>目標下的所有日記列表目標──>目標下我的日記列表的導航的頁面上把從request中獲得的屬性jumpToViewDiaries顯示在頁面的右上部和右下部目標下的所有日記列表──>目標目標下的我的日記列表──>目標的導航中把從request中獲得的屬性jumpToViewGoal顯示在頁面的右上部和右下部就行了
  
  總結
  
  1心得
  
  1)編碼前的分析設計是非常重要的這一步工作做好了編碼就很容易了(但我還做得不夠如下面的第3)條心得可是也許是我的水平有限有些應該放在設計時的工作不到編碼的時候就是想不到還望大家給予指點)
  
  2)Struts框架把程序的邏輯實現代碼和頁面顯示部分能比較好的分離有利於功能模塊的新增和程序的後期維護
  
  3)在進行類和類的方法的設計時(如前面提到的Pager類和PageDB類)沒有先進行完整的高層設計是采用邊編碼邊設計的方式致使類的設計不夠面向對象給後期的理解和維護會造成困難
  
  4)如果這種導航設計思路真的有用有必要把它進行精心的設計做成插件的形式這樣可以把它方便的應用於需要這種動態導航的各種java的web程序中
  
  2這種動態導航的優點
  
  1)能夠極大的提高用戶的浏覽體驗使網站的導航更符合邏輯和人們的思維習慣
  
  2)能夠無限的進行需要導航的頁面的增加和減少後期的維護代碼少量增加就行了
  
  3這種動態導航的缺點
  
  1)實現過程較為復雜牽涉的頁面和邏輯代碼較多權衡實現的代價和收到的效果真的值得嗎?
  
  2)動態導航能被用戶的使用習慣接受嗎?這是一個未知數
  
  3)還有什麼缺點呢?暫時還沒有想出來大家幫我們想一想吧
From:http://tw.wingwit.com/Article/program/Java/ky/201311/28403.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.