4

名簿に表示するアイテムの数を制御するドロップダウンの設定を保存しようとしています。どうすればこれを行うことができますか?ドロップダウンは、onChangeを使用して名簿の結果を並べ替えています。

4

1 に答える 1

1

私は速度をしないので、JSP/サーブレットを対象とした回答を次に示します。Velocity は実際にはテンプレート エンジンであり、リクエストの制御/前処理/後処理には何もしないため、サーブレットも使用していると思います。

後続のリクエストで特定のデータを保持したいですか? これを実現するには、基本的に 2 つの方法があります。

  1. 非表示の入力要素で後続のリクエストの値を保持します。例えば

    <form action="servlet" method="post">
        <select name="itemcount" onchange="submit()">
            <option>1</option><option>2</option><option>3</option>
        </select>
    </form>
    

    そして、次のリクエストの形式で:

    <form action="servlet" method="post">
        <select name="sortfield" onchange="submit()">
            <option>col1</option><option>col2</option><option>col3</option>
        </select>
        <input type="hidden" name="itemcount" value="${param.itemcount}">
    </form>
    

    ${param.itemcount}基本的に返品しますrequest.getParameter("itemcount")。非表示の入力要素に格納されている場合は何も表示されませんがrequest.getParameter("itemcount")、次のリクエストで利用できるようになります。

  2. 値をセッションに保存します。たとえば、サーブレット内:

    Integer itemcount = Integer.valueOf(request.getParameter("itemcount"));
    request.getSession().setAttribute("itemcount", itemcount);
    

    必要に応じて、次のように同じセッションで実行されている任意のサーブレットでアクセスできるようにします。

    Integer itemcount = (Integer) request.getSession().getAttribute("itemcount");
    

    しかし、これには大きな注意点があります。ユーザーが同じセッション内で複数のウィンドウを開いており、両方のウィンドウで異なる項目数を選択した場合に発生します。ウィンドウ A で最後に選択された値がウィンドウ B に反映されます。

リクエストスコープのデータをリクエストスコープに保持する必要があることは明らかだと思うので、方法1がより優先されます。セッション スコープのデータに対してのみセッションを使用します。

于 2010-01-22T11:20:14.520 に答える