【问题标题】:How to set a value of textfield as a session attribute in jsp before rendering?如何在渲染之前将文本字段的值设置为jsp中的会话属性?
【发布时间】:2015-04-26 04:30:32
【问题描述】:

假设我有代码

<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,但在提交表单之前。 无需提交表单即可存储会话的代码有任何替代方案。

【问题讨论】:

  • 什么会话属性?
  • 在表单标签中使用属性 onSubmit。声明一个函数并返回true。
  • 我想在提交表单之前执行 session.setAttriute("rollno",rollno)
  • Session是服务器端的东西,浏览器中不存在,所以不能为所欲为。

标签: javascript html css ajax jsp


【解决方案1】:

你根本无法做你想做的事。在 JSP 页面呈现(HTML 生成)之后,您处于客户端。 Web 浏览器中根本不存在用户会话(HTTP 是一种无状态协议)。

如果您想在会话中添加某些内容,通常的方法是使用 Servlet。你POST你的表单到这个servlet,你从HttpRequest 方法的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");
    } 
}

【讨论】:

  • 您可以简单地使用 AJAX 向 servlet 发出 post 请求。我正在添加一个示例。
  • 或者我可以使用 localStorage.setItem() 来存储,如果是,那么如何使用变量存储在 jsp 变量中 var r=localStorage.getItem("roll") ; // String rollno=(String)r; //错误声明无法将void转换为字符串
  • JSP 无法访问本地存储。 JSP在服务端,localStorage在客户端。
【解决方案2】:

在不使用 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);
%>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-26
    • 2012-10-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多