【发布时间】:2010-01-20 14:08:05
【问题描述】:
我有一个显示来自 servlet 的列表的 JSP 页面,它有一个用于过滤搜索结果的文本框。我正在选择列表(表格)中的一个项目,并在完成编辑后重定向到另一个页面以编辑详细信息。我可以通过 servlet 返回搜索页面,但无法在文本框中保留搜索条件及其结果。怎么做?我正在考虑设置一个会话值并在搜索页面中获取它,对吗?或者有没有其他办法?
【问题讨论】:
我有一个显示来自 servlet 的列表的 JSP 页面,它有一个用于过滤搜索结果的文本框。我正在选择列表(表格)中的一个项目,并在完成编辑后重定向到另一个页面以编辑详细信息。我可以通过 servlet 返回搜索页面,但无法在文本框中保留搜索条件及其结果。怎么做?我正在考虑设置一个会话值并在搜索页面中获取它,对吗?或者有没有其他办法?
【问题讨论】:
将其存储在会话范围内是最简单的方法,但根据您的应用程序的预期大小,可能会出现一些可伸缩性问题。
作为替代方案,当您选择列表中的项目时,您可以转发(而不是重定向,因为如果您进行重定向,您会丢失请求参数)到另一个页面,将搜索查询作为请求中的参数传递.一种可能性是有一个包含两个隐藏字段(查询和选定项)的表单:
<form action="go_to_the_detail">
<input type="hidden" name="selectedItem" value="value_selected_item" />
<input type="hidden" name="query" value="query" />
</form>
在编辑页面中:
<form action="go_to_save_item">
<input type="hidden" name="query" value="query_obtained_from_the_request" />
item fields to be modified
</form>
因此,当用户完成编辑项目时,将再次传递查询以显示在搜索框中。
【讨论】:
您可以通过隐式${param} 变量访问EL 中的请求参数。后续请求中可以通过input type="hidden"元素保留请求参数。
因此,以下基本示例应该可以工作。
A页:
<form action="page B">
<input type="text" name="search" value="${param.search}">
</form>
B页:
<form action="page A">
<input type="hidden" name="search" value="${param.search}">
</form>
请记住,当您在 servlet 中执行 redirect 而不是 forward 时,这些会丢失,仅仅是因为 redirect 将创建一个全新的请求,从而垃圾初始请求,包括其所有参数和属性。
【讨论】: