目前我有一個工作的應用程序,但我想一些建議,因爲我覺得必須有更好的解決方案。我正在構建的網站上的一項功能是向用戶顯示搜索時的視頻。搜索將通過點擊如"View All Dreamweaver Tutorials"
這樣的鏈接完成。搜索中的每個頁面最多有12個視頻,如果搜索更多,則可以單擊鏈接轉到其他頁面。再說一遍,所有的工作都很好,但我不是我的邏輯迷,並且想聽聽有沒有人有更好的解決方案來完成一項非常常見的任務。尋找一個更好的解決方案然後一個數組列表
下面是當用戶點擊一個鏈接,我可能送的參數的例子...
search?tag=Dreamweaver&sub=CSS&page=1
哪裏tag
是主要的類別,sub
是子類,page
是當前頁面,他們希望查看。如果用戶給出超出界限的頁面,則它們被導向到特殊屏幕。所以,如果小服務器看到
search?tag=Dreamweaver&sub=CSS&page=1000
它會重定向用戶!
現在,這裏是一個有點我的servlet的,抓住被髮送這些參數......
category = request.getParameter("tag");
subCategory = request.getParameter("sub");
page = Integer.parseInt(request.getParameter("page"));
ArrayList<Integer> startStop = Page.getPageStartStop(page);
int start = startStop.get(0);
int stop = startStop.get(1);
videoList = SearchDAO.getSearchResults(category, subCategory, start, stop);
這裏就是我不喜歡我的邏輯。正如你所看到的,我首先獲取參數。相當正常。但後來我在Page類中調用了一個方法,並將它發送給頁碼參數。因此,對於這個例子,我將發送數字1.然後,該方法的目的是通過if語句找出數據庫應該查詢的開始點和停止點。所以這個方法看起來像這樣。所以對於例如
public static ArrayList<Integer> getPageStartStop(int page)
{
ArrayList<Integer> startStop = new ArrayList<Integer>();
if (page == 1)
{
startStop.add(0);
startStop.add(12);
return startStop;
}
else if (page == 2)
{
startStop.add(11);
startStop.add(23);
return startStop;
}
......
}
如果第1頁被髮送,該方法停止返回0開始至12,因此該查詢知道從哪裏開始,在哪裏停止發送這些值到我的DAO。下面是我的DAO片段,最後兩個問題標記成爲我的開始和結束。
preparedStatement = connection.prepareStatement("SELECT * FROM videos WHERE category = ? AND subCategory = ? LIMIT ?,?");
所以問題是Page類需要大量if語句來預測頁面並返回它們的結果。任何人都可以想到一個更好的方法來做到這一點。也許一個普通的算法?所以很多網站利用這個功能,所以我知道必須有一個更清晰的方式來解決這個問題。老實說,這只是我頭腦中的第一件事。非常感謝您的閱讀!意見和答案將不勝感激!
'page = Integer.parseInt(request.getParameter(「page」));'如果'page'丟失,會拋出異常。你可能想要默認第一頁或者什麼,所以也許:'page = Integer.parseInt(request.getParameter(「page」)!= null?request.getParameter(「page」):「0」);' – Windle
如果頁面丟失,他們永遠不會進入代碼的那一部分。上面執行錯誤檢查。 – gmustudent