我正在尝试存储一个下拉设置,该设置控制在花名册中显示多少项目。我该怎么做呢?下拉列表使用 onChange 对名册的结果进行排序。
2262 次
1 回答
1
我不做 Velocity,所以这里有一个针对 JSP/Servlet 的答案。我想你也在使用 Servlet,因为 Velocity 实际上是一个模板引擎,对控制/预处理/后处理请求没有任何作用。
所以你想在后续请求中保留某些数据?基本上有两种方法可以实现这一点。
将后续请求的值保留在隐藏的输入元素中。例如
<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")
当存储在隐藏的输入元素中时,您什么也看不到,但它也将在下一个请求中可用。将值存储在会话中。例如在 servlet 内部:
Integer itemcount = Integer.valueOf(request.getParameter("itemcount")); request.getSession().setAttribute("itemcount", itemcount);
这样您就可以在需要时在同一会话中运行的任何 servlet 中访问它,如下所示:
Integer itemcount = (Integer) request.getSession().getAttribute("itemcount");
但这有一个重要的警告:这可能会导致“wtf?” 当用户在同一个会话中打开多个窗口并在两个窗口中选择不同的 itemcount 时的体验。窗口 A 中最后选择的值将反映到窗口 B 中!
我认为很明显,您应该将请求范围内的数据保留在请求范围内,因此方式 1 更可取。仅将会话用于会话范围的数据。
于 2010-01-22T11:20:14.520 回答