/** * 修改的點擊觸發事件 * @param data */ function change(courseid) { //將獲取到的courseid傳入到session sessionStorage.setItem("courseId",courseid); //跳轉到修改頁面 window.location.href="${sessionScope.path}/admin/jsp02/alterCourse.jsp"; }
上面的這個是一個觸發按鈕,可以通過設置onclick事件
$(sessionScope.path)/ 這里寫跳轉頁面的相對路徑
獲取方法,在這里我是寫一個函數,把數據返回,x()
function x(){ var data = sessionStorage.getItem("courseId"); return data; }
if(x()==null||x()==""){ alert("請點擊對應課程修改按鈕"); window.location.href="${sessionScope.path}/admin/jsp02/index.jsp"; }else{ a(); }
這里是避免直接在頁面地址上寫路徑報錯誤,傳送一個空值過去
------------------------------------------------------------------------------------------------------
更全面的理解:
先提出幾個問題?
1、一個jsp頁面的轉發如何轉發到另一個jsp頁面
2、一個Servlet如何把參數的傳遞到一個jsp頁面,並能接受到
我先回答第一個問題,在這里我看到jsp頁面轉發到另一個jsp頁面,我第一個想到的就是重定向
和轉發,但發現如果要在jsp頁面做就是要:
index2.jsp頁面 實現跳轉到index.jsp頁面
1、
<% request.getRequestDispatcher("/index.jsp").forward(request,response); %>
這樣做可以實現跳轉到index.jsp頁面,但是我發現這種方法的話不能做到控制它達到某種條件再轉發
例如我這里本來想做一個觸發事件,發現還沒有點擊就直接跳轉了
所以這個方法雖然可以實現跳轉但不夠完整;
於是我使用另一種方法就可以實現jsp跳轉那就是: window.location.href = "${sessionScope.path}/ 路徑";
2、
function x(){ window.location.href = "${sessionScope.path}/index.jsp"; }
<input type="button" id="bto" value="按鈕" onclick="x()">
這樣就能實現控制跳轉頁面
這種方法是jsp頁面跳轉jsp頁面比較簡單的方法
還有一種form表單:
3、
<form action="${path}/index.jsp" >
<input type="submit" value="提交">
</form>
也可以實現控制跳轉頁面
還有一種比較麻煩的:那就是ajax
4、
$("#bto").click(function () {
$.ajax({
type: "Get",
dataType: "text",
url: "${path}/UserServlet",
data: "userName="+Math.random(),
success: function(data){
<%-- document.getElementById("b").innerHTML = data;--%>
if(data){
window.location.href = "${sessionScope.path}/index.jsp";
}
},
error: function(msg){
alert("請聯系客戶")
}
})
})
<input type="button" id="bto" value="按鈕">
通過點擊事件觸發ajax提交Servlet層,然后可以響應數據回來,然后跳轉(當然這個方法和第二種方法差不多,它能帶參數第二種也可以)
第二種方法(2、)的那個方法 -----》 帶參數的:
function x(){ sessionStorage.setItem("userId",2); window.location.href = "${sessionScope.path}/index.jsp"; }
sessionStorage.setItem()方法設置鍵值,但這里的接收,不是session.getAttribute() 得到值然后再set進去session隱藏域;而是
function y(){ var item = sessionStorage.getItem("userId"); return item; }
使用sessionStorage.getItem()方法獲取,然后就直接調用y()就可以獲取到另一個jsp頁面的值,這個方法頭頂上有
繼續說ajax方法:
提交到Servlet層后,可以使用三種放轉發到另一個jsp:
1、重定向
2、轉發
3、window.location.href = ${sessionScope.path}/路徑;
要帶參數的話,主要有兩種方法,一種是把它set到session的作用域里,:
Servlet層:req就是request
req.getSession().setAttribute();
通過這個方法拿到session的隱藏作用域,然后這個方法不是想剛剛那個
sessionStorage.getItem那樣獲取,而是:
<% Object userId = session.getAttribute("userId"); //由於這里的數據永遠不會被清除,除非瀏覽器關閉,所以要重新set到session的作用域 session.setAttribute("userId",userId); %>
之后使用EL表達式${} 獲取
注意:
1、編碼格式
2、Servlet層可以使用重定向、轉發、window.location.href = .... ;但若是參數傳遞的話,
jsp可以使用
sessionStorage.setItem("userId",2);
這種方法,但Servlet不能,它只能使用把參數放進Session隱藏域中的方法
request.getSession().setAttribute(); ----------這種方式設置參數
對應的jsp獲取到參數的頁面:
session.getAttribute返回一個Object類型,然后這里要記得把它再次
session.setAttribute
通過EL表達式,${}獲取
