2017-05-15 40 views
0

我有一個問題,在使用Spring MVC不可能呼叫控制器方法,用Spring MVC的Ajax調用

,我想用ajax調用,試圖呼叫控制器的方法,但我想不出,有一個JSP頁面和控制器類

我的Jsp頁面,

  <form role="form" > 

       <div class="form-group"> 
        <label for="Ders">Ders</label> 
        <form:select path="derslist" class="form-control" id="ddlders"> 
         <form:options items="${derslerlistesi}" itemValue="dersid" 
          itemLabel="ders" /> 
        </form:select> 
       </div> 
       <div class="form-group"> 

        <label for="KonuAd">Konu Ad</label> <input type="text" 
         class="form-control" id="KonuAd" placeholder="Konu İsmi Giriniz!"> 


       </div> 
       <div class="form-group"> 
        <button type="submit" id="btnekle" class="btn btn-default">Ekle</button> 
       </div> 

和我的控制器類

package publisher.controller; 


import java.util.List; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.http.MediaType; 
import org.springframework.stereotype.Controller; 
import org.springframework.ui.Model; 
import org.springframework.web.bind.annotation.ModelAttribute; 
import org.springframework.web.bind.annotation.RequestBody; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 
import org.springframework.web.bind.annotation.RequestParam; 
import org.springframework.web.bind.annotation.ResponseBody; 

import com.fasterxml.jackson.core.JsonProcessingException; 
import com.fasterxml.jackson.databind.ObjectMapper; 

import publisher.dao.Dao; 
import publisher.entity.Dersler; 
import publisher.entity.Konular; 



@Controller 
public class IslemlerController { 

    @Autowired 
    private Dao dao; 

    @Autowired 
    private Konular _konu; 

    @RequestMapping(value = "/islemler", method = RequestMethod.GET) 
    public String Home(Model model,Dersler dersler) { 

    model.addAttribute("derslist",dersler); 
    return "islemler"; 

    } 


    @ModelAttribute("derslerlistesi") 
    public List<Dersler> getdersler() 
    { 
     return dao.getAll(Dersler.class); 
    } 

    @ModelAttribute("konulistesi") 
    public List<Konular> getKonular() 
    { 
     return dao.getAll(Konular.class); 
    } 

    @ResponseBody 
    @RequestMapping(value="/konukaydet",method=RequestMethod.POST) 
    private Konular KonuKaydet (@RequestParam String konu,@RequestParam int dersid) 
    { 
     _konu.setKonu(konu); 
     _konu.setDersid(dersid); 
     _konu.setSinavid(1); 
     _konu = dao.save(_konu); 
      System.out.println("kaydet e girdi !"); 
     return _konu; 
    } 

} 

和我的腳本代碼

$(document).ready(function() { 
    $("#btnekle").click(function() { 
    var input = { 
     "konu": $("#KonuAd").val(), 
     "dersid": $("#ddlders").val() 
    }; 
    var inputStr = JSON.stringify(input); 
    alert(inputStr); 
    $.ajax({ 
     url: "/islemler/konukaydet", 
     type: "POST", 
     data: inputStr, 
     dataType: "json", 
     success: function(output) { // callback method for further manipulations 
     var str = JSON.stringify(output); 
     alert("success "); 
     $("#output").text(data); 
     }, 
     error: function(data) { // if error occured 
      alert("err"); 
     $("#error").text(data); 
     } 
    }); 

    }); 
}); 

感謝您的幫助!

+0

你可以檢查你的響應呼籲瀏覽器並檢查它返回的響應代碼是什麼? – adi

+0

好,然後通過接受或投票的意見關閉這個問題 –

+0

實際上,我得到了一個新問題ajax調用成功沒有射擊我的代碼下面,它的工作調用方法,並做了一些工作,但沒有射擊成功ajax調用你有任何想法? –

回答

0

我認爲你在腳本中有問題,你需要傳遞數據作爲查詢參數,因爲你已經在控制器類中使用了@RequestParam。所以在你的ajax調用你的url應該如下。

url: "/islemler/konukaydet?konu="+input.konu+"&dersid="+input.dersid; 

注意 - 你沒有在你的控制器使用islemlerURL@RequestMapping(value="/islemler/konukaydet",method=RequestMethod.POST)

它可以幫助你,如果沒有請回復我。

如果你想使用你的腳本,因爲它是,那麼你需要在你的控制器來改變和使用@RequestBody和使用模型

1

要添加到@山姆的角度來看,根據對JS您的網址,你需要在控制器級別添加@RequestMapping。所以,你的控制器看起來應該像:

@RequestMapping(value = "/islemler") 
    @Controller public class IslemlerController { 

因此,通過在控制器水平和KonuKaydet方法結合水平要求映射,你現在必須完成所需的請求映射。

0

我假設你已經在調度-servlet.xml中配置的控制器

如果沒有see this

如果您是在本地機器上運行它,那麼你需要調用呼叫作爲

$.ajax({ //other options. . url: http://localhost:<port>/<your-url> //other options. . });

此外@RequestMapping應在控制器級別給出。

+0

我解決了這個問題,是的,我沒有看到這個教程,我在這個URL上使用了腳本代碼。當我在我的控制器上使用「@RequestMapping(value =」islemler/konukaydet「,method = RequestMethod.POST)」註釋在我的控制器方法上工作時,無需http:// localhost:,感謝ASquare先生 –

+0

我認爲dispatherservlet找不到我的控制器方法url –

0

在你@RequestMapping你應該映射完整的URL在控制器方法或添加在控制器級別@RequestMapping像:

@Controller 
@RequestMapping("/islemler/") 
public class IslemlerController { 

    @Autowired 
    private Dao dao; 

    @Autowired 
    private Konular _konu; 

    @RequestMapping(value = "home", method = RequestMethod.GET) 
    public String Home(Model model,Dersler dersler) { 

    model.addAttribute("derslist",dersler); 
    return "islemler"; 

    } 


    @ModelAttribute("derslerlistesi") 
    public List<Dersler> getdersler() 
    { 
     return dao.getAll(Dersler.class); 
    } 

    @ModelAttribute("konulistesi") 
    public List<Konular> getKonular() 
    { 
     return dao.getAll(Konular.class); 
    } 

    @ResponseBody 
    @RequestMapping(value="konukaydet",method=RequestMethod.POST) 
    private Konular KonuKaydet (@RequestParam String konu,@RequestParam int dersid) 
    { 
     _konu.setKonu(konu); 
     _konu.setDersid(dersid); 
     _konu.setSinavid(1); 
     _konu = dao.save(_konu); 
      System.out.println("kaydet e girdi !"); 
     return _konu; 
    } 

} 

你的AJAX調用應該是這樣的:

$(document).ready(function() { 
    $("#btnekle").click(function() { 
    var input = { 
     "konu": $("#KonuAd").val(), 
     "dersid": $("#ddlders").val() 
    }; 
    var inputStr = JSON.stringify(input); 
    alert(inputStr); 
    $.ajax({ 
     url: "../islemler/konukaydet", 
     type: "POST", 
     data: inputStr, 
     dataType: "json", 
     success: function(output) { // callback method for further manipulations 
     var str = JSON.stringify(output); 
     alert("success "); 
     $("#output").text(data); 
     }, 
     error: function(data) { // if error occured 
      alert("err"); 
     $("#error").text(data); 
     } 
    }); 

    }); 
}); 

爲您的家庭法你的網址就像「../islemler/home」

我希望它可以幫助你。

0

解決這個問題,

Script代碼

function madeAjaxCall(){ 
    var data = {} 
    data["konu"] = $("#konuad").val() 
    data["dersid"] = $("#ddlders").val() 

$.ajax({ 
    type: "post", 
// http://localhost:8080 
    url: "/islemler/konukaydet", 
    cache: false,  
// data:'konu=' + $("#konuad").val() + "&dersid;=" + $("#ddlders").val(), 
    data:data, 
    success: function(response){ 
    $('#result').html(""); 
    var obj = JSON.parse(response); 
    $('#result').html("First Name:- " + obj.konu +"</br>Last Name:- " + obj.dersid ); 
    }, 
    error: function(){  
    alert('Error while request..'); 
    } 
}); 
} 

和控制器代碼

@RequestMapping(value="islemler/konukaydet",method=RequestMethod.POST) 
private @ResponseBody Konular KonuKaydet (HttpServletRequest request, HttpServletResponse response) 
{ 
    _konu.setKonu(request.getParameter("konu")); 
    _konu.setDersid(Integer.parseInt(request.getParameter("dersid"))); 
    _konu.setSinavid(1); 
    _konu = dao.save(_konu); 
     System.out.println("kaydet e girdi !"); 

    return _konu; 
} 

這麼多的感謝... :)