0

Httpはステートレスであり、HttpRequestから以前のデータセットを取得する方法がないため、現在、継続的なスクロールページネーションを行っています。ページ変数をユーザーセッションに格納することをお勧めしますか?(最後にロードされたコンテンツのIDを追加して、次のロードまたは次のリクエストで次の要素をロードするようにします)(ページがAJAX経由でロードされると仮定します)私はこのように実装しました。

したがって、たとえば、ユーザーが特定の名前を検索すると、これを実行する特定のアクションに移動します。

paginationHelperBean = new PaginationHelper();

        if(page == 0 && name != null){
            paginationHelperBean.setCurrent_page(0);
        } else {
            paginationHelperBean.setCurrent_page(page);
        }

        //Set the paginationBean for display references in JSP later
        paginationHelperBean.setPer_page(RESULTS_PER_PAGE);
        paginationHelperBean.setTotal_count(profileService.countSearchProfiles(name, paginationHelperBean.getCurrent_page(), RESULTS_PER_PAGE));
        paginationHelperBean.setNumber_of_pages();


    session.put("profileSearchKey", this.name);
    session.put("profileSearchPage", page);

また、ユーザーが別のフラグメントまたはデータセットを要求すると、以前に読み込まれたコンテンツの次のアイテムが実行され、これを実行するアクションが実行されます。

String key = (String)session.get("profileSearchKey");

int page = (Integer)session.get("profileSearchPage")+1;
profiles = profileService.searchProfiles(key, page, RESULTS_PER_PAGE);
session.put("profileSearchPage", page);

だから私の質問は、ページ関連の変数をページネーションのためにセッションに保存するのは悪い習慣ですか(例えば、連続スクロールでページネーションを検索しますか?)

4

2 に答える 2

2

私の意見では、無限スクロールを行うことは、追加のコンテンツをフェッチするために ajax 呼び出しを使用することと変わらないはずです。追加データのフェッチをトリガーするもの (ユーザーがページの下部までスクロールする) があり、それが到着すると表示されます。また、最後に取得したページ番号で JavaScript 変数を更新して、ユーザーがページの一番下までスクロールしたときに次のページを取得することもできます (この情報をセッション変数に格納する必要はありません。たとえば、/ への ajax 呼び出しなど)。 nextPage.jsp?page_number=[valueFromJavaSript])。

これを、フェッチされた最後のページをセッション変数に保存することと対比してください。ユーザーが無限スクロール ページから移動して戻ってきたとしたら、どうなると思いますか? jsp ページに戻ったときにページ番号のセッション変数をリセットして、後続の ajax 呼び出しが正しいページ番号を取得できるようにします。また、複数の無限スクロール ページを追加すると、いくつかの「現在のページ」がセッションに保存されます。

回答を送信する前に、他の人がどのように行っているかを確認したかったのですが、Slashdot には以前は無限スクロールがありましたが、残念ながら現在は [次へ] ボタンがあります。しかし、「無限スクロール Web サイトの 30 以上の優れた例」という記事を見つけまし。フィドラー(http://www.fiddler2.com/fiddler2/)を使用して、リクエストでページ番号を渡しているかどうか(つまり、セッションに保存していないか)を確認しました。チェックしたのは(ページ番号、オフセットのいずれかです) 、または同様のものですが、情報は明らかにリクエストに含まれています)。

于 2013-03-11T16:54:02.320 に答える
0

ページ変数をユーザーセッションに保存することは良い習慣ですか: いいえ。セッション属性はスレッドセーフではないため、特定の HttpSession にアクセスできるユーザーのみがアクセスできます。詳細については、サーブレットのリクエストとセッションを参照してください。

あなたが書いたコードは、同期化の問題を通過することができます.1つのスレッドが以前に設定した値を取得している場合、別のスレッドが変更して別の値を設定している可能性があります.そのため、最初のスレッドが値を取得しようとすると、価値を得るかもしれませんが、それは正しい価値ではないかもしれません。コード session.put("profileSearchKey", this.name); session.put("profileSearchPage", ページ); スレッド A が profileSearchKey と profileSearchPage の値を入力するとします。スレッド A が属性名 profileSearchKey と profileSearchPage の値を取得しようとすると、this.name とページの値が別のスレッドによって変更される可能性があります。したがって、値を取得すると、同期の問題が発生します。

于 2013-03-18T05:54:09.303 に答える