【问题标题】:Redirect back to previous jsp page with previous form value from servlet使用来自 servlet 的上一个表单值重定向回上一个 jsp 页面
【发布时间】:2020-07-07 09:11:54
【问题描述】:

所以基本上我使用以下代码作为搜索包裹功能,它有 2 个按钮 addnewsearch 两者都将获得在输入​​字段中输入的值target,并根据选择的按钮进行重定向

        <div>
            <i class="fas fa-search"></i>
            <form id="forms" method="post" action="admin_tracking.jsp">
                <input name="target" type="input" placeholder = "TrackingNo..." class = "text_search"/>
            </form>
        </div>
        <script>
            function submit(value)
            {
                console.log(value)
                if (value == "add") {
                    //change action of form
                    document.getElementById('forms').action = 'admin_tracking.jsp?status='
                    document.getElementById('forms').submit(); //submit
                } else {
                    document.getElementById('forms').action = 'admin_home_result.jsp'
                    document.getElementById('forms').submit();
                }
            }
        </script>
        <button class="button_search" value = "add" onclick="submit(this.value)">
            Add New
        </button>
        <button class="button_search" value = "srch" onclick="submit(this.value)">
            Search
        </button>

重定向到搜索页面后,匹配trackingNo的包裹将被返回,用户可以选择更新包裹状态或删除包裹。 当用户选择更新包裹时,AdminCollectServlet将被调用如下:

href="AdminCollectServlet?target=<%=rs.getString("trackingNo")%>&from=${pageContext.request.requestURI}&query=${pageContext.request.queryString}"

执行数据库更新。一旦完成,我就使用了这条线

response.sendRedirect(request.getParameter("from") + "?" + request.getParameter("query"));

重定向回调用 servlet 的位置。

但是由于target是在表单中提交的,而不是作为url的参数,重定向页面将无法返回搜索结果。

我想知道有没有办法检索完整的表单内容并将其传递到response.sendredirect(),就像如何传递参数一样?

【问题讨论】:

    标签: javascript java html jsp


    【解决方案1】:

    如果您需要在client-side 存储值,您可以使用localStorage 存储token 的值,然后再提交form 并再次加载页面,您可以获得该值localStorage.getItem(yourvalue);。一些您需要在 jshtml 代码中进行更改。 在您的html 代码中,在body 标签下添加onload。即:

     //add onload event
     <body onload="check_storage()">
     <!--other html codes-->
     </body>
    

    您的javascript 代码:

    //onload of your page this will get called
    function check_storage() {
      //check if there is any value in localStorage
      if (localStorage.getItem("save") != null) {
        //get that value
        var value = localStorage.getItem("save");
        alert(value);
        //put that value again in input box
      document.getElementsByName("target")[0].value = value;
      }
    }
    
    function submit(value) {
    //getting input value
      var save =  document.getElementsByName("target")[0].value;
       console.log(save);
      localStorage.clear();//clear previous data
      localStorage.setItem("save", save);//add data to storage
      if (value == "add") {
        //change action of form
        document.getElementById('forms').action = 'admin_tracking.jsp?status='
        document.getElementById('forms').submit(); //submit
      } else {
        document.getElementById('forms').action = 'admin_home_result.jsp'
        document.getElementById('forms').submit();
      }
    }
    

    或者,如果您需要将值存储在server side,您可以使用HttpSession,使用setAttribute,您可以存储token 的值并在您的jsp 页面中获取它,只需编写${sessionScope.yourvariablename}

    【讨论】:

    • 嘿@Swati,再次感谢您的帮助,不胜感激。我修改了其中的一部分,以便我可以从 java 访问 javascript 变量,如下所示
    【解决方案2】:

    经过上述斯瓦蒂的回答后,我能够解决部分问题。 它解决了从我的AdminCollectServlet重定向回来后从我的forms获取target的值的问题

    但是由于我需要使用target的值,在javascript中,在java中执行sql查询,我修改了一些部分。

            <script>
                function submit(value)
                {
                    console.log(value)
                    if (value == "add") {
                        //change action of form
                        document.getElementById('forms').action = 'admin_tracking.jsp?status='
                        document.getElementById('forms').submit(); //submit
                    } else {
                        var save = document.getElementById('forms')[0].value;
                        localStorage.clear();
                        localStorage.setItem("save", save);
                        localStorage.setItem("counter", "0");
                        document.getElementById('forms').action = 'admin_home_result.jsp'
                        document.getElementById('forms').submit();
                    }
                }
            </script>
    

    在我的submit(value) 函数中,我按照斯瓦蒂的指导使用,添加另一个变量counter。 这个变量允许我实现上面 Swati 写的check_storage() 函数,并将targetvalue 放在url 参数中,这样我就可以在java sql 查询中使用它。

                function check_storage()
                {
                    if(localStorage.getItem("save") != null)
                    {
                        var value = localStorage.getItem("save");
                        if(localStorage.getItem("counter") != null && localStorage.getItem("counter")=="0")
                        {
                            localStorage.setItem("counter", "1");
                            window.location.replace("admin_home_result.jsp?target=" + value);
                        }
                    }
                }
    

    我用了这条线:

    window.location.replace("admin_home_result.jsp?target=" + value);
    

    用设置的参数值和行刷新页面:

    if(localStorage.getItem("counter") != null && localStorage.getItem("counter")=="0")
    

    为防止无限刷新,请在更改 url 之前更改 counter 变量

    这种方式允许我存储来自formstarget 值,将其重定向到servlet,再次重定向回原始页面并访问java 中的javascript 变量以进行我的sql 查询

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-18
      • 1970-01-01
      • 2013-09-05
      • 2018-12-17
      • 1970-01-01
      • 1970-01-01
      • 2018-03-15
      • 2012-04-18
      相关资源
      最近更新 更多