如何在页面刷新时为同一页面维护Droplist所选项目?

时间:2013-03-08 06:57:00

标签: jsp java-ee servlets

当我点击提交按钮并在同一页面重定向时,如何能够获得与我的ddl相同的所选项目?

2 个答案:

答案 0 :(得分:0)

我希望您在点击 search 时,必须将DDL2的allM DDL2作为请求参数发送到服务器。

如果搜索将您带到您的servlet以获取搜索结果或执行任何类型的业务逻辑,而不是重定向或转发到包含DDL的JSP之前,您可以添加all&amp; 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.ddl1param["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会更好。

答案 1 :(得分:0)

您无法存储从表单提交的数据,因为您被重定向到页面。 我能想到的选择是将它存储在会话中并传递它。

这个SO问题可以帮助你how to set data in Session