是否可以在SPRING MVC 3中提交表格而无需刷新?
我想要的是将SPRING表单中的数据存储到java object / 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表单以外的用户输入?
答案 0 :(得分:2)
答案 1 :(得分:1)
你做得很好。但是你缺少的一件事就是从java脚本函数中“返回false”。因为您从表单提交按钮调用该函数,所以在成功处理您的ajax请求之后,它也会提交表单。所以你需要阻止它。
希望这会对你有所帮助。干杯。
答案 2 :(得分:1)
我认为以下代码可以帮助您
如果要更新“开始位置”,请在事件下方调用javascript方法 需要在您的情况下单击提交按钮而不是“codeAddress()”方法调用addStartLocation方法
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;
}