Использование $ request.session.setAttribute для сохранения настроек раскрывающегося списка - PullRequest
4 голосов
/ 22 января 2010

Я пытаюсь сохранить настройку раскрывающегося списка, которая управляет количеством элементов, отображаемых в списке.Как мне это сделать?Раскрывающийся список использует onChange для сортировки результатов списка.

1 Ответ

1 голос
/ 22 января 2010

Я не делаю Velocity, так что вот ответ на JSP / Servlet. Я предполагаю, что вы также используете сервлеты, поскольку Velocity на самом деле является механизмом шаблонов и ничего не делает для управления запросами / preprocess / postprocess.

То есть вы хотите сохранить определенные данные в последующих запросах? Есть два основных способа добиться этого.

  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");
    

    Но у этого есть серьезное предостережение: это может вызвать "wtf?" происходит, когда пользователь имеет несколько окон, открытых в одном сеансе, и выбирает различную учетную запись в обоих окнах. Последнее выбранное значение в окне A будет отражено в окне B!

Я думаю, очевидно, что вы должны хранить данные в области запроса в области запроса, поэтому способ 1 более предпочтителен. Используйте сеанс только для данных области сеанса.

...