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に使用して、Googleマップを表示し、その場所にマーカーを表示できるようにします。しかし、フォームを送信するたびにページが更新されるため、マップを含むページ全体がリロードされるため、マーカーはレンダリングされません

これが私の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フォームプラグインと一緒にjQueryjavascriptライブラリを使用することを検討します。これにより、AJAXを使用した(つまり、ページ全体をリロードせずに)フォームを投稿するのがはるかに簡単になります。

于 2012-06-15T06:34:24.760 に答える
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
}

次に、SpringMVCコントローラーでこのリクエストを次のように処理します

@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 に答える
1

あなたがしていることは問題ありません。しかし、欠けているのは、java スクリプト関数からの「return false」だけです。フォーム送信ボタンからその関数を呼び出しているため、ajax リクエストを正常に処理した後、フォームも送信されます。だからあなたはそれを止める必要があります。

これがお役に立てば幸いです。乾杯。

于 2012-06-14T20:18:19.777 に答える