当我点击提交按钮并在同一页面重定向时,如何能够获得与我的ddl相同的所选项目?
答案 0 :(得分:0)
我希望您在点击 search 时,必须将DDL2的all
和M
DDL2作为请求参数发送到服务器。
如果搜索将您带到您的servlet以获取搜索结果或执行任何类型的业务逻辑,而不是重定向或转发到包含DDL的JSP之前,您可以添加all
& M
请求参数作为请求属性,然后在JSP中根据<option>
值检查这些请求属性。
我假设您的代码可能如下所示:
JSP code snipet
<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
attribute将被放置为选项。
我正在使用JSP Expression Language (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
会更好。
答案 1 :(得分:0)
您无法存储从表单提交的数据,因为您被重定向到页面。 我能想到的选择是将它存储在会话中并传递它。
这个SO问题可以帮助你how to set data in Session