如何在请求之后持久化请求数据



我正在使用jsp。我有这样一个用例:

主页包含一个搜索框、一个提交按钮和一个下拉菜单。当用户从下拉菜单中选择内容,在搜索框中输入查询并点击提交按钮后,它会转到同一页面,其中包含基于查询的一些结果。

主页包括其他页面(例如results.jsp、searchtables.jsp),这些页面只有在搜索返回一些结果后才可见。在显示这些结果后,我想保留在主页(下拉框和搜索框)中输入的值。

所以如果主页是/home,点击按钮后,它仍然在与/search附加的同一页面中,并显示检索到的结果。

我有办法做到这一点吗?

谢谢

如果您使用forward而不是redirect,则可以在控制器中使用request属性:

request.setAttribute("searchVal", searchVal); 
request.setAttribute("dropdownVal", dropdownVal);

然后在jsp页面上,您可以像这样访问该值:

<input type="text" name="search" value="${searchVal}"/> //will be empty if searchVal is never set

<select>
    <option value="val1" ${dropdownVal == 'val1' ? 'selected="selected"' : ''}>val1</option>
</select>

如果您正在进行重定向,您可以将值附加为url查询,然后在jsp页面上使用${params.search}${params.dropdown}访问它们。

最后一个选项是在HTML5 web存储对象中使用localStorage,它在客户端而不是服务器端存储东西,但你需要编写一些javascript代码来处理。

由于表单是提交给自己的,您可以检查post参数,如果它们存在,将它们添加到表单中。

<input type="text" name="txtbox" value="<%= request.getParameter("txtbox") %>">

然后你可以对下拉值做类似的事情,如果这是通过POST传递的项,则将"selected"添加到选项中

<select name="mySelect">
    <option value="1" <% if(request.getParameter("mySelect") == "1"){ out.print("selected") } %>>Option 1</option>
    <option value="2" <% if(request.getParameter("mySelect") == "2"){ out.print("selected") } %>>Option 2</option>
</select>

最新更新