【问题标题】:Retaining values of variables after successive form submission in JSP [duplicate]在JSP中连续提交表单后保留变量的值[重复]
【发布时间】:2013-03-29 04:21:04
【问题描述】:

我写了以下两个jsp文件。第一个文件,即 submit.jsp 有表单,用户提交她的查询,她的城市和纬度和经度被记录下来,她被转发到另一个 jsp 页面,该页面也有一个表单,她可以再次提交她的查询,只要她愿意,我希望保留 city 、 latitude 和 longitude 的值,但它们正在重置。两个文件的代码如下:

提交.jsp

<%@ page contentType="text/html; charset=iso-8859-1" language="java" %>
<html>
<head>
 <script type="text/javascript">
  function getLocation(){
  if (navigator.geolocation){
      navigator.geolocation.getCurrentPosition(showPosition);
    }
  }
  function displayLocation(latitude,longitude){
    var request = new XMLHttpRequest();

    var method = 'GET';
    var url = 'http://maps.googleapis.com/maps/api/geocode/json?latlng='+latitude+','+longitude+'&sensor=true';
    var async = true;

    request.open(method, url, async);
    request.onreadystatechange = function(){
      if(request.readyState == 4 && request.status == 200){
        var data = JSON.parse(request.responseText);
        var address = data.results[0];
        //document.write(address.formatted_address);
        var city=document.getElementById("city");
        var n = address.formatted_address.split(",");
        city.value = n[n.length-3];
      }
    };
    request.send();
  };

function showPosition(position){
//var x = document.getElementById("demo");
var latitude=document.getElementById("latitude"),longitude=document.getElementById("longitude");
//x.innerHTML="+" + position.coords.latitude + "+" + position.coords.longitude;
latitude.value = position.coords.latitude;
longitude.value = position.coords.longitude;
displayLocation(latitude.value,longitude.value);
}

</script>

</head>
<body onload="getLocation()">
<form name="frm" method="post" action="process.jsp">
<input type="text" name="myQuery" placeholder="Type here">
<input name="latitude" id="latitude" type="hidden">
<input name="longitude" id="longitude" type="hidden">
<input name="city" id="city" type="hidden">
<input type="submit" name="submit" value="Submit">
</form>
</body>
</html>

process.jsp

<%@ page contentType="text/html; charset=iso-8859-1" language="java" %>
<%! String city; String latitude; String longitude; %>
<form name="frm" method="post" action="process.jsp">
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="22%">&nbsp;</td>
<td width="78%">&nbsp;</td>
</tr>
<tr>
<td>&nbsp; </td>
<td><input type="text" name="myQuery" placeholder="Type here"></td>
</tr>
<tr>
<td>&nbsp;</td>
<input name="latitude" id="latitude" type="hidden" value="${latitude}" >
<input name="longitude" id="longitude" type="hidden" value="${longitude}" >
<input name="city" id="city" type="hidden" value="${city}"  >
<td><input type="submit" name="submit" value="Submit"></td>
</tr>
<tr>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
</table>
</form>

<%
String query=request.getParameter("myQuery");
String city=request.getParameter("city");
String latitude=request.getParameter("latitude");
String longitude=request.getParameter("longitude");
%>
<html>
<body>
<p>Query phrase is : <%=query%></p>
<p>User's city : <%=city%></p>
</body>
</html>

我是 JSP 的新手。所以任何人都可以帮我修复给定的代码。

【问题讨论】:

    标签: html forms jsp


    【解决方案1】:
    <%@ page contentType="text/html; charset=iso-8859-1" language="java" %>
    <%! String city; String latitude; String longitude;String query; %>
    
    
    <%
    query=request.getParameter("myQuery");
    city=request.getParameter("city");
    latitude=request.getParameter("latitude");
    longitude=request.getParameter("longitude");
    %>
    <html>
    <body>
    <form name="frm" method="post" action="process.jsp">
    <table width="100%" border="0" cellspacing="0" cellpadding="0">
    <tr>
    <td width="22%">&nbsp;</td>
    <td width="78%">&nbsp;</td>
    </tr>
    <tr>
    <td>&nbsp; </td>
    <td><input type="text" name="myQuery" placeholder="Type here"></td>
    </tr>
    <tr>
    <td>&nbsp;</td>
    <input name="latitude" id="latitude" type="hidden" value="<%=latitude%>" >
    <input name="longitude" id="longitude" type="hidden" value="<%=longitude%>>" >
    <input name="city" id="city" type="hidden" value="<%=city%>"  >
    <td><input type="submit" name="submit" value="Submit"></td>
    </tr>
    <tr>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    </tr>
    </table>
    </form>
    <p>Query phrase is : <%=query%></p>
    <p>User's city : <%=city%></p>
    </body>
    </html>
    

    【讨论】:

      【解决方案2】:

      尝试获取文件开头的参数。

      <%
      String query=request.getParameter("myQuery");
      String city=request.getParameter("city");
      String latitude=request.getParameter("latitude");
      String longitude=request.getParameter("longitude");
      %>
      

      【讨论】:

      • 不,先生,它不工作。
      • 在您的代码中,在 submit.jsp 中,您将获取纬度、经度和位置的值。以及您在提交表单时提交的值。所以第一次提交表单时,它将获取值。但是在 process.jsp 页面中,当您单击提交按钮时,它将没有纬度 n 经度值(您的 javascript 代码为您提供在 submit.jsp 上的位置)
      • 这就是为什么我问是否有任何方法可以保留这些变量的值,即使表单被多次提交。
      • 只能使用 1 个页面提交重定向到同一页面来完成。
      • 但是先生,如果我像上面那样重定向到另一个页面,我已经做了没有办法吗?因为我需要提交表单重定向到另一个页面。
      【解决方案3】:

      像这样...

      <%@ page contentType="text/html; charset=iso-8859-1" language="java" %>
          <html>
          <head>
           <script type="text/javascript">
            function getLocation(){
            if (navigator.geolocation){
                navigator.geolocation.getCurrentPosition(showPosition);
              }
            }
            function displayLocation(latitude,longitude){
              var request = new XMLHttpRequest();
      
          var method = 'GET';
          var url = 'http://maps.googleapis.com/maps/api/geocode/json?latlng='+latitude+','+longitude+'&sensor=true';
          var async = true;
      
          request.open(method, url, async);
          request.onreadystatechange = function(){
            if(request.readyState == 4 && request.status == 200){
              var data = JSON.parse(request.responseText);
              var address = data.results[0];
              //document.write(address.formatted_address);
              var city=document.getElementById("city");
              var n = address.formatted_address.split(",");
              city.value = n[n.length-3];
            }
          };
          request.send();
        };
      
      function showPosition(position){
      //var x = document.getElementById("demo");
      var latitude=document.getElementById("latitude"),longitude=document.getElementById("longitude");
      //x.innerHTML="+" + position.coords.latitude + "+" + position.coords.longitude;
      latitude.value = position.coords.latitude;
      longitude.value = position.coords.longitude;
      displayLocation(latitude.value,longitude.value);
      }
      
      </script>
      
      </head>
      <body onload="getLocation()">
      <%! String city; String latitude; String longitude; %>
      <%
      String query=request.getParameter("myQuery");
      String city=request.getParameter("city");
      String latitude=request.getParameter("latitude");
      String longitude=request.getParameter("longitude");
      %>
      <form name="frm" method="post" action="submit.jsp">
      <input type="text" name="myQuery" placeholder="Type here">
      <input name="latitude" id="latitude" type="hidden">
      <input name="longitude" id="longitude" type="hidden">
      <input name="city" id="city" type="hidden">
      <input type="submit" name="submit" value="Submit">
      </form>
      <p>Query phrase is : <%=query%></p>
      <p>User's city : <%=city%></p>
      </body>
      </html>
      

      【讨论】:

      • 不,先生,它没有按我的意愿工作。我希望提交表单将我重定向到另一个页面,在那里我可以根据需要多次提交查询,并且应该保留纬度、经度和城市的值。
      • 然后在你想重定向到的页面上写同样的javascript函数。
      • 只是您的 process.jsp 文件中的一些更改
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-27
      • 1970-01-01
      • 2019-09-11
      • 1970-01-01
      • 2011-04-25
      • 2018-07-03
      相关资源
      最近更新 更多