首页 > 解决方案 > 使用来自 servlet 的上一个表单值重定向回上一个 jsp 页面

问题描述

所以基本上我使用以下代码作为搜索包裹功能,它有 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()如何传递参数?

标签: javascriptjavahtmljsp

解决方案


如果您需要存储值,client-side您可以使用localStoragetoken在再次提交页面和 onload 之前存储值,form您可以获得该值localStorage.getItem(yourvalue);。您需要在代码js中进行一些更改。html在您的html代码中添加标签 .ie onloadbody

 //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}.


推荐阅读