2

当我单击提交按钮并在同一页面重定向时,如何才能拥有我的 ddl 的相同选定项目?

4

2 回答 2

0

我希望您在单击时必须将allDDL1 和MDDL2 作为请求参数发送到服务器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 获取请求参数ddl1ddl2.

<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 回答