一个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表达式,${}获取

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2019-11-08 11:43  AxeBurner  阅读(12161)  评论(0编辑  收藏  举报