我有一个带下拉框的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">
答案 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。