2015-02-24 78 views
0

假設我有代碼如何在渲染之前將jsp中的textfield值設置爲會話屬性?

<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

什麼會話屬性? – meskobalazs 2015-02-24 14:00:16

+0

在表單標籤中使用屬性onSubmit。聲明一個函數並返回true。 – reporter 2015-02-24 14:00:19

+0

我想執行session.setAttriute(「rollno」,rollno)但在提交表格前 – Azad 2015-02-24 14:12:09

回答

0

簡單的方法。

規範文本字段

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

你根本無法做到你想達到的目標。在JSP頁面的呈現(HTML生成)之後,您位於客戶端。用戶會話根本不存在於Web瀏覽器中(HTTP是無狀態協議)。

如果你想在會話中使用一些常用的方法,就是使用一個Servlet。你POST你的表格到這個servlet,你從HttpRequest參數doPost方法得到HttpSession參數,然後你把你的變量從請求參數放到會話中。之後,您將重定向客戶端以向目標JSP頁面發出GET請求。

當然,您可以在不使用AJAX提交表單的情況下執行所有操作。例如用jQuery的$.ajax功能:

var params = { 
    rollno: document.getElementById("rollno").value 
}; 
$.ajax({ 
    url: 'myServlet?' + $.param(params), 
    type: 'post' 
}); 

然後你就可以用了Servlet處理:設定的servlet沒有提交/ rendring形式不使用的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"); 
    } 
} 
+0

亞那,我怎麼能使用相同的AJAX .... – Azad 2015-02-24 15:05:20

+0

你可以簡單地使用AJAX發送到servlet的後發送請求。我正在添加一個例子。 – meskobalazs 2015-02-24 15:09:26

+0

或者我可以使用localStorage.setItem()來存儲如果是,那麼如何使用該變量來存儲在jsp變量 var r = localStorage.getItem(「roll」); // String rollno =(String)r; //錯誤說明無法將void轉換爲字符串 – Azad 2015-02-24 15:12:38

相關問題