假设我有代码
<html>
<head>
<script>
function ses()
{
var r=document.getElementById("rollno").value;
session.setAttribute("rollno",r);
}
</script>
</head>
<body>
<form action="process.jsp">
RollNO: <input type="text" name="rollno" id="rollno" onblur=ses()>
Admission no<input type="text" name="anum" id="anum">
<input type="submit" value="Next"/>
</form>
</body>
</html>
我想将会话属性设置为在提交表单之前在文本字段中输入rollno。对于存储会话而不提交表单的代码,有任何替代方案。
你根本无法实现你想要实现的目标。在JSP页面的呈现(HTML生成)之后,您就在客户端了。用户会话根本不存在于web浏览器中(HTTP是无状态协议)。
如果你想在会话中使用一些东西,通常的方法是使用Servlet。您POST表单到此servlet,从doPost
方法的HttpRequest
参数中获得HttpSession
,然后将请求参数中的变量放入会话中。在此之后,您重定向客户端以向目标JSP页面发出GET请求。
当然,您可以使用AJAX在不实际提交表单的情况下完成所有这些操作。例如,使用jQuery $.ajax
函数:
var params = {
rollno: document.getElementById("rollno").value
};
$.ajax({
url: 'myServlet?' + $.param(params),
type: 'post'
});
然后你可以用Servlet处理它:
@WebServlet(name="myServlet", urlPatterns={"/myServlet"})
public class MyServlet extends HttpServlet {
@Override
public void doPost(HttpServletRequest req, HttpServletResponse resp) {
HttpSesssion session = req.getSession();
// put the request parameter into the session
session.setAttribute("rollno", req.getParameter("rollno"));
// if this wouldn't be AJAX, we would redirect the user
// resp.sendRedirect("myOtherPage.jsp");
}
}
在不使用servlet的情况下设置servlet而不提交/提交表单的最简单方法。
文本字段代码
RollNO:<input type="text" name="rollno" id="rollno" onblur="ses(this.value)">
包含文本字段的文件的Javascript:
function ses(roll)
{
var req=getRequestObject();
req.onreadystatechange=function(){handleResponse(req);};
req.open("GET","set_session.jsp?rollno="+roll,true);
req.send(null);
}
function handleResponse(req)
{
if(req.readyState==4)
{
alert("Session has been set");
}
}
function getRequestObject()
{
if(window.XMLHttpRequest)
{
return(new XMLHttpRequest());
}
else if(window.ActiveXObject)
{
return(new ActiveXObject("Microsoft.XMLHTTP"));
}
else
{
return(null);
}
}
文件set_session.jsp:
<%
String rollno=request.getParameter("rollno");
session.setAttribute("roll",rollno);
%>