刷新JSP页面后,在HTML select元素中保留选定的值

时间:2013-06-25 08:45:35

标签: java jsp servlets http-request-parameters

我有一个带下拉框的JSP。我选择一个选项并提交一个。所以现在我获得了存储在所选选项的数据库中的信息。现在我通过在servlet中设置为

来自动刷新JSP(HTML页面)
//servlet code inside doGet() method
HttpSession session=request.getSession();
String selUrl=request.getParameter("urlsel");    
String opt=session.setAttribute("selectedUrl",selUrl);
String selopt=session.getAttribute("selectedUrl");
response.setHeader("Refresh","10;url="/SiteAvailabilityServlet?ursel="+selectedUrl);
//and forwarding request to result.jsp using RequestDispatcher..

// input.jsp code

<select name="urlsel">
<option value="abc">abc</option>
<option value="def">def</option>
</select>

我第一次选择 abc 选项并手动提交时,它会给我正确的结果并显示数据库中的详细信息。 10秒后,它将使用相同的选项 abc 自动刷新(我不想更改选项),但不显示值。正在采取

  request.getParameter("urlsel")    as null  after refreshing automatically.

请帮帮我。在 result.jsp 我正在使用

 <form method="get" action="/SiteAvaialabilityServlet">

2 个答案:

答案 0 :(得分:2)

我认为如果替换此行,您的代码应该起作用:

response.setHeader("Refresh","10;url="/SiteAvailabilityServlet?ursel="+selectedUrl);

有了这个:

response.setHeader("Refresh","10;url=/SiteAvailabilityServlet?urlsel="+ selopt);

这改变了:

  • "从标题中的网址中删除,我不明白为什么它应该在那里;
  • urlsel不是ursel;
  • 为什么selectedUrl?它是会话属性的名称,您想要的是会话属性的值。由于你有(selopt),你可能只想使用它。

您的HTML可能需要更好地处理,就此行而言,"缺失:

<form method="get" action="/SiteAvaialabilityServlet> 

所以用这个替换它:

<form method="get" action="/SiteAvaialabilityServlet">

希望所有这些拼写错误都不在原始代码中。

P.S :请更正您问题中的代码以帮助每个人:)。

祝你好运。

答案 1 :(得分:2)

作为对已接受答案的补充,这里有一个JSP(类似于your previous question),用于展示如何在刷新后使用HTML select 元素保留所选值。页

注意: The usage of scriptlets is discouraged。在下面的示例中,为了简单起见,使用了scriptlet,以模拟OP在example 中尝试执行的操作。

test.jsp的

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%
    String selectValue = request.getParameter("course");
    if (selectValue != null) {
        session.setAttribute("savedCourse", request.getParameter("course"));
    }
%>
<!DOCTYPE html>
<html>
<head>
    <title>Test Page</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <meta http-equiv="refresh" content="3; url=${pageContext.request.requestURL}?savedCourse=${sessionScope.savedCourse}">
</head>
<body>
    <h1>Test Page</h1>
    <form action="" method="post">
        <p>Choose some course</p>
        <select name="course">
            <option value="English" name="eng" <c:if test="${sessionScope.savedCourse == 'English'}">selected="selected"</c:if>>English</option>
            <option value="Math" name="mat" <c:if test="${sessionScope.savedCourse == 'Math'}">selected="selected"</c:if>>Math</option>
            <option value="Computer Science" name="sci" <c:if test="${sessionScope.savedCourse == 'Computer Science'}">selected="selected"</c:if>>Computer Science</option>
        </select>
        <p><input type="submit" value="Pass data" /></p>
    </form>
    <hr />
    <h2>Testing submitted and saved parameter</h2>
    <p>Passed "course" parameter (will display nothing after auto REFRESH) = <span style="color: #FF0000">${param.course}</span></p>
    <p>Stored "savedCourse" attribute = <span style="color: #FF0000">${sessionScope.savedCourse}</span></p>
</body>
</html>

有关其他信息,请查看此答案:https://stackoverflow.com/a/17280533/814702


关于您的代码的一些注意事项:

  • 设置 session 属性并在下一行中有什么意义 从会话获取此属性,当它已经可用时(在 selurl变量)?

  • HttpSession#setAttribute(String name, Object value)方法未返回 任何事情( void ),因此您无法将 void 分配给 String 类型的变量opt,就像您在码。此代码将无法编译并向您显示错误:incompatible types

  • request.getParameter("urlsel")返回 null 的原因是 因为它是刷新,因此是新请求,而请求 属性在新请求之间重置。请在此处阅读:Servlet Redirection to same page with error message