【问题标题】:How to maintain the Droplist selected item at page refresh for the same page?如何在同一页面的页面刷新时维护 Droplist 选定项?
【发布时间】:2013-02-23 16:04:22
【问题描述】:

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

【问题讨论】:

  • 你能提供更多关于你想要做什么的信息吗?一些代码或屏幕截图也可能有所帮助。谢谢
  • @PrakashK 例如,我有用于过滤显示的数据的下拉列表...现在,当我在 ddl1 中选择“全部”和在 ddl2 中选择“M”时,当我单击搜索时,页面将刷新。现在,当页面已经刷新时,我想将“全部”和“M”显示为我的 ddl 中选择的默认值,而不是 ddl 中的第一个列表

标签: jsp jakarta-ee servlets


【解决方案1】:

希望您点击search时,一定要将DDL1的all和DDL2的M作为请求参数发送到服务器。

如果搜索将您带到您的 servlet 以获取搜索结果或执行任何类型的业务逻辑,而不是在重定向或转发到包含 DDL 的 JSP 之前,您可以添加 allM 请求参数作为请求属性,然后在 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 代码 sn-p

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 代码如下所示:

我们刚刚在每个选项块中包含了一个&lt;c:if&gt; 条件,以检查返回的属性是否等于选项值,如果是,则为选项放置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 会更好。

【讨论】:

    【解决方案2】:

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

    这个 SO 问题应该对你有帮助 how to set data in Session

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-21
      • 1970-01-01
      • 2020-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多