如何在渲染之前将textfield的值设置为jsp中的会话属性?

时间:2015-02-24 13:57:08

标签: javascript html css ajax jsp

假设我有代码

<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但在提交表单之前。 在没有提交表单的情况下,存储会话的代码有任何替代。

2 个答案:

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