1

我有一个带有下拉框的 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代码

<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">
4

2 回答 2

2

我认为如果您替换此行,您的代码应该可以正常工作:

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

有了这个 :

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

改变的是:

  • An"已从标头中的 URL 中删除,我不明白为什么它应该在那里;
  • urlsel不是ursel;_
  • 为什么selectedUrl?它是会话属性的名称,您想要的是会话属性的值。既然你有那个 ( selopt),你可能只想使用它。

就这一行而言,您的 HTML 可能希望得到更好的照顾,"缺少 an :

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

所以用这个替换它:

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

希望所有这些错别字不在您的原始代码中。

PS:请更正您问题中的代码以帮助大家帮助您:)。

祝你好运。

于 2013-06-25T10:00:44.043 回答
2

作为已接受答案的补充,这里有一个 JSP(类似于您之前的问题),展示了如何在刷新页面后使用 HTML选择元素保留选择的值。

注意:不鼓励使用 scriptlet。在下面的示例中,为了简单起见,使用小脚本来模拟 OP 在他的示例中尝试执行的操作。

测试.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属性和在下一行从session获取此属性有什么意义?selurl

  • HttpSession#setAttribute(String name, Object value)方法不返回任何内容(void),因此您不能像在代码中那样将void分配给Stringopt类型的变量。此代码不会编译并给您一个错误:.incompatible types

  • request.getParameter("urlsel")返回null的原因是因为它是一次刷新,因此是一个 NEW 请求,并且请求属性在新请求之间被重置。在这里阅读:Servlet Redirection to same page with error message

于 2013-06-25T16:31:12.583 回答