当我单击提交按钮并在同一页面重定向时,如何才能拥有我的 ddl 的相同选定项目?
问问题
2527 次
2 回答
0
我希望您在单击时必须将all
DDL1 和M
DDL2 作为请求参数发送到服务器search。
如果搜索将您带到您的 servlet 以获取搜索结果或执行任何类型的业务逻辑,而不是在重定向或转发到包含 DDL 的 JSP 之前,您可以添加all
&M
请求参数作为请求属性,然后在 JSP 中检查那些根据值请求属性<option>
。
我假设您的代码可能如下所示:
JSP 代码片段
<select name="ddl1">
<option value="0">all</option>
<option value="A">A</option>
<option value="B">B</option>
<option value="C">C</option>
<option value="D">D</option>
</select>
<select name="ddl2">
<option value="0">All</option>
<option value="L">L</option>
<option value="M">M</option>
<option value="N">N</option>
<option value="O">O</option>
</select>
Servlet 代码片段
String ddl1Param = request.getParameter("ddl1");
String ddl2Param = request.getParameter("ddl2");
// your business logic
// ...
request.setAttribute("ddl1Attr", ddl1Param);
request.setAttribute("ddl2Attr", ddl2Param);
// your forward or redirect logic goes here
// ...
现在更改后的 JSP 代码将如下所示:
我们刚刚<c:if>
在每个选项块中包含了一个条件,以检查返回的属性是否等于选项值,如果是,则将为选项放置该selected
属性。
我正在使用JSP 表达式语言 (EL)。
<select name="ddl1">
<option value="0" <c:if test="${'0' eq ddl1Attr}">selected</c:if>>all</option>
<option value="A" <c:if test="${'A' eq ddl1Attr}">selected</c:if>>A</option>
<option value="B" <c:if test="${'B' eq ddl1Attr}">selected</c:if>>B</option>
<option value="C" <c:if test="${'C' eq ddl1Attr}">selected</c:if>>C</option>
<option value="D" <c:if test="${'D' eq ddl1Attr}">selected</c:if>>D</option>
</select>
<select name="ddl2">
<option value="0" <c:if test="${'0' eq ddl2Attr}">selected</c:if>>all</option>
<option value="L" <c:if test="${'L' eq ddl2Attr}">selected</c:if>>L</option>
<option value="M" <c:if test="${'M' eq ddl2Attr}">selected</c:if>>M</option>
<option value="N" <c:if test="${'N' eq ddl2Attr}">selected</c:if>>N</option>
<option value="O" <c:if test="${'O' eq ddl2Attr}">selected</c:if>>O</option>
</select>
另一种方法
如果您只是将单击搜索时的请求转发到同一个 JSP(即两者之间没有 servlet),那么 JSP 代码可以修改为:
要么你可以使用param.ddl1
要么param["ddl1"]
,它是一样的。此 EL 获取请求参数ddl1
和ddl2
.
<select name="ddl1">
<option value="0" <c:if test="${'0' eq param.ddl1}">selected</c:if>>all</option>
<option value="A" <c:if test="${'A' eq param.ddl1}">selected</c:if>>A</option>
<option value="B" <c:if test="${'B' eq param.ddl1}">selected</c:if>>B</option>
<option value="C" <c:if test="${'C' eq param.ddl1}">selected</c:if>>C</option>
<option value="D" <c:if test="${'D' eq param.ddl1}">selected</c:if>>D</option>
</select>
<select name="ddl2">
<option value="0" <c:if test="${'0' eq param['ddl2']}">selected</c:if>>all</option>
<option value="L" <c:if test="${'L' eq param['ddl2']}">selected</c:if>>L</option>
<option value="M" <c:if test="${'M' eq param['ddl2']}">selected</c:if>>M</option>
<option value="N" <c:if test="${'N' eq param['ddl2']}">selected</c:if>>N</option>
<option value="O" <c:if test="${'O' eq param['ddl2']}">selected</c:if>>O</option>
</select>
另一种方法是将值存储在session
. 但我认为坚持request
会更好。
于 2013-03-08T08:55:02.937 回答
0
您无法存储从表单提交的数据,因为您被重定向到页面。我能想到的选项是将它存储在会话中并传递它。
这个 SO question 应该可以帮助您如何在 Session 中设置数据
于 2013-03-08T09:13:40.753 回答