假设我有代码
<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但在提交表单之前。 在没有提交表单的情况下,存储会话的代码有任何替代。
答案 0 :(得分:1)
你根本无法做到你想要达到的目标。在JSP页面的呈现(HTML生成)之后,您就在客户端。用户会话在Web浏览器中根本不存在(HTTP是无状态协议)。
如果您想在会话中使用某些内容,通常的方法是使用Servlet。您将表单 POST 发送到此servlet,从HttpSession
方法的HttpRequest
参数中获取doPost
,然后将变量从请求参数中输入会议。在此之后,您重定向客户端以对目标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");
}
}
答案 1 :(得分:0)
在不使用servlet的情况下设置servlet而不提交/重新呈现表单的最简单方法。
TextField代码
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);
%>