2

是否可以在不刷新的情况下在 SPRING MVC 3 中提交表单?

我想要的是将 SPRING 表单中的数据存储到 java对象/POJO。

这是我的map.jsp

<form:form action="" method="post" commandName="userQuery">    
    <form:input path="startLocation"  id ="startLocation" />
<input type="submit" value="Search" onclick="codeAddress()">

 <script  type="text/javascript">
     function codeAddress(){
        var address = document.getElementById("startLocation").value;                
        geocoder.geocode( { 'address': address, 'partialmatch' : true }, geoCodeResults );                
 </script>

我正在尝试将数据(即 startLocation )存储到 java 对象,同时将该数据用于 javascript,以便我可以显示谷歌地图并在该位置显示标记。但是每次我提交表单时,它都会刷新页面,因此不会呈现 MARKER,因为它会重新加载包括地图在内的整个页面

这是我的Controller.java

@RequestMapping(value= "/map" , method = RequestMethod.GET)
public ModelAndView showMap(){
    ModelAndView mav = new ModelAndView("home/map");
    Query query = new Query();
    mav.getModel().put("userQuery", query);                
    return mav;        
}

  @RequestMapping(value="/map", method = RequestMethod.POST)
 public ModelAndView createMap(@ModelAttribute("userQuery") Query query ){                
    ModelAndView mav = new ModelAndView("home/map");        
    List<Query> q = new ArrayList<Query>();        
    q.add(new Query(query.getStartLocation()));                        
    mav.addObject("q", q);        
    return mav;        
}

我需要存储startLocation。请帮忙。除了 SPRING 表单之外,还有其他存储用户输入的方法吗?

4

3 回答 3

2

我会考虑将jQuery javascript 库与 jQuery表单插件一起使用。它使使用 AJAX 发布表单(即无需重新加载整个页面)变得更加容易。

于 2012-06-15T06:34:24.760 回答
1

你在做什么很好。但是您缺少的一件事是 java 脚本函数中的“return false”。因为您是从表单提交按钮调用该函数,所以在成功处理您的 ajax 请求后,它也会提交表单。所以你需要阻止它。

希望这对您有所帮助。干杯。

于 2012-06-14T20:18:19.777 回答
1

我认为下面的代码会帮助你

在事件上调用下面的 javascript 方法,当您想更新开始位置时,需要在提交按钮单击时调用 addStartLocation 方法,而不是“codeAddress()”方法

var xmlHttp;
            function addStartLocation(){
                if (typeof XMLHttpRequest != "undefined"){
                    xmlHttp= new XMLHttpRequest();
                }
                else if (window.ActiveXObject){
                    xmlHttp= new ActiveXObject("Microsoft.XMLHTTP");
                }
                if (xmlHttp==null){
                    alert("Browser does not support XMLHTTP Request")
                    return;
                }
                var url="/project/updateStartLocation";
                url +="?location=" +document.getElementById("location").value;
                xmlHttp.onreadystatechange = displayMap;
                xmlHttp.open("GET", url, true);
                xmlHttp.send(null);
            }

function displayMap() {
// Here you can right geocode to display map
}

然后在 Spring MVC Controller 中像这样处理这个请求

@RequestMapping(value = "/updateStartLocation", method = RequestMethod.GET)
    public @ResponseBody String updateStartLocation(@RequestParam(value = "location", required = true) String location, Model model) {
        //Perform your logic to update Start Location
        return location;
    }
于 2012-06-19T11:49:30.423 回答