現在、動作しているアプリケーションがありますが、より良い解決策があるはずだと感じているので、アドバイスをお願いします。私が構築しているサイトの機能の1つは、ユーザーが検索したときにビデオを表示する機能です。検索は、次のようなリンクをクリックして実行されます。検索の"View All Dreamweaver Tutorials"
各ページには最大12本の動画があり、検索でさらにクエリが実行された場合は、リンクをクリックして他のページに移動できます。繰り返しますが、すべて正常に動作しますが、私は私のロジックのファンではないので、非常に一般的なタスクに対してより良い解決策があるかどうかを聞きたいと思います。
これは、ユーザーがリンクをクリックしたときに送信する可能性のあるパラメーターの例です...
search?tag=Dreamweaver&sub=CSS&page=1
tag
はメインカテゴリ、sub
はサブカテゴリ、はpage
現在のページです。ユーザーが範囲外のページを表示すると、特別な画面が表示されます。したがって、サーブレットが見た場合
search?tag=Dreamweaver&sub=CSS&page=1000
ユーザーをリダイレクトします!
さて、これが送信されるこれらのパラメータを取得する私のサーブレットのビットです...
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の抜粋であり、最後の2つの疑問符が私の開始と終了になります。
preparedStatement = connection.prepareStatement("SELECT * FROM videos WHERE category = ? AND subCategory = ? LIMIT ?,?");
したがって、問題は、Pageクラスがページを予測してその結果を返すために多くのifステートメントを必要とすることです。他の誰かがこれを行うためのより良い方法を考えることができますか?多分一般的なアルゴリズム?非常に多くのWebサイトがこの機能を利用しているため、この問題を実行するためのよりクリーンな方法が必要であることを私は知っています。正直なところ、最初に頭に浮かんだのはそれだけでした。読んでくれてありがとう!コメントと回答をいただければ幸いです。