我有一个JSP页面,它显示来自servlet的列表,它有一个文本框,用于过滤搜索结果。我在列表(表格)中选择一个项目,并在完成编辑后重定向到另一个页面以编辑细节。我可以通过servlet返回搜索页面,但是我无法在文本框中保留搜索条件及其结果。怎么做?我正在考虑设置会话值并在搜索页面中获取它,这是正确的吗?或者还有其他方法吗?
答案 0 :(得分:1)
将它存储在会话范围内是最简单的方法,但是,根据应用程序的预期大小,可能会出现一些可伸缩性问题。
作为替代方案,当您在列表中选择一个项目时,您可以转发(而不是重定向,因为如果您进行重定向,则丢失请求参数)到另一个页面,将搜索查询作为参数传递给请求。一种可能性是使表单具有两个隐藏字段(查询和所选项目):
<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>
因此,当用户完成对项目的编辑时,将再次传递查询以便在搜索框中显示。
答案 1 :(得分:0)
您可以通过隐式${param}
变量访问EL中的请求参数。您可以通过input type="hidden"
元素在后续请求中保留请求参数。
因此,以下基本示例应该有效。
第A页:
<form action="page B">
<input type="text" name="search" value="${param.search}">
</form>
Page B:
<form action="page A">
<input type="hidden" name="search" value="${param.search}">
</form>
请记住,当您在servlet中执行重定向而不是转发时,这些将会丢失,原因很简单,因为重定向< / em>将创建一个全新的请求,特此包含初始请求,包括其所有参数和属性。