一个jsp连带参数跳转到另一个jsp页面的解决方法
/** * 修改的点击触发事件 * @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表达式,${}获取