Я не делаю Velocity, так что вот ответ на JSP / Servlet. Я предполагаю, что вы также используете сервлеты, поскольку Velocity на самом деле является механизмом шаблонов и ничего не делает для управления запросами / preprocess / postprocess.
То есть вы хотите сохранить определенные данные в последующих запросах? Есть два основных способа добиться этого.
Сохранить значение для последующего запроса в скрытом элементе ввода. Э.Г.
<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")
в следующем запросе.
Сохранить значение в сеансе. Например. внутри сервлета:
Integer itemcount = Integer.valueOf(request.getParameter("itemcount"));
request.getSession().setAttribute("itemcount", itemcount);
, чтобы вы могли получить к нему доступ в любом сервлете, запущенном в том же сеансе, когда это необходимо:
Integer itemcount = (Integer) request.getSession().getAttribute("itemcount");
Но у этого есть серьезное предостережение: это может вызвать "wtf?" происходит, когда пользователь имеет несколько окон, открытых в одном сеансе, и выбирает различную учетную запись в обоих окнах. Последнее выбранное значение в окне A будет отражено в окне B!
Я думаю, очевидно, что вы должны хранить данные в области запроса в области запроса, поэтому способ 1 более предпочтителен. Используйте сеанс только для данных области сеанса.