如何在呈现之前在jsp中将textfield的值设置为会话属性

How to set a value of textfield as a session attribute in jsp before rendering?

本文关键字:设置 会话 属性 textfield jsp 中将      更新时间:2024-04-15

假设我有代码

<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);
%>