2016-10-02 88 views
0

我使用的是spring boot,maven 3.2.5。 我正在使用mvc模式使用spring引導的簡單maven webapp。 我想從jsp調用ajax調用控制器方法。如何使用ajax從jsp調用控制器方法

這是我的jsp javascript方法的樣子,它調用ajax調用來調用控制器方法。

function listExistingUser() 
 
\t { \t 
 
\t 
 
\t alert("listExistingUser"); 
 

 
\t \t $.ajax({ 
 
\t \t \t type : "GET", 
 
\t \t \t url : '${home}/loginController/listExistingUser', 
 
\t \t \t dataType : "json", 
 
\t \t  crossDomain:true, 
 
\t \t \t success : function(data) { 
 
\t \t \t \t //console.log(data); 
 
\t \t \t \t //alert(data.toString()); 
 
\t \t \t \t checkValidUser(data); \t 
 
\t \t \t }, 
 
\t \t \t error : function(data) { 
 
\t \t \t \t \t 
 
\t \t \t } 
 
\t \t \t }); 
 
\t }

貝婁是我的控制器類。

@Controller 
 
@RequestMapping("/loginController") 
 
public class LoginController { 
 
\t 
 
\t @Autowired 
 
\t LoginService loginService; 
 
\t 
 
\t @RequestMapping(value = "/listExistingUser", method = RequestMethod.GET) 
 
\t @ResponseBody 
 
\t public Object getAuthentication(@ModelAttribute("studentId") int studentId, 
 
\t \t \t HttpServletRequest request, HttpServletResponse response) 
 
\t \t \t { 
 
\t \t \t \t System.out.println("listExistingUser is called in controller"); 
 
\t \t \t } 
 
}

當我運行我的應用程序,我能夠從波紋管網址 http://localhost:9090/seperation-management/pages/login.jsp

訪問login.jsp的時候我打提交按鈕我的jsp頁面的JavaScript方法也越來越所謂的是alert("listExistingUser"); 但我不能稱爲我的控制器方法。

我在哪裏犯錯。誰能幫我。

回答

2

有在控制器上的方法來進行一些改變

@RequestMapping(value = "/listExistingUser", method = RequestMethod.GET) 
@ResponseBody 
public ResponseEntity<Object> getAuthentication(){ 
System.out.println("listExistingUser is called in controller"); 
return new ResponseEntity<Object>(object,HttpStatus.OK); 
} 

您不需要有@modelAttribute註釋,因爲您沒有與請求綁定任何對象。返回ResponseEntity而不是返回Object是一種好的做法。

如果您需要從傳入的請求中獲得一個ID 像這樣siteName/listExistingUser/1然後使用此方法。

@RequestMapping(value = "/listExistingUser/{id}", method = RequestMethod.GET) 
@ResponseBody 
public ResponseEntity<Object> getAuthentication(@PathVariable("id") int id){} 

,如果你想從一個網址,以獲取值這樣 siteName/listExistingUser?id=1然後用這個方法來代替。

@RequestMapping(value = "/listExistingUser", method = RequestMethod.GET) 
@ResponseBody 
public ResponseEntity<Object> getAuthentication(@RequestParam("id") int id){} 
0

這個例子是工作在我的應用程序:

JSP:

<script type="text/javascript" charset="utf-8"> 
     function getDesc() { 
      $.getJSON("desclist.json", { 
       sel1Id : $('select#COMPSNT_NM').val() 
      }, function(data) { 
       var html = ''; 
       var len = data.length; 
       for (var i = 0; i < len; i++) { 
        html += '<option value="' + data[i] + '">' 
          + data[i] + '</option>'; 
       } 
       $('select#COMPSNT_DS').html(html); 
      }); 
     } 

     $(document).ready(function() { 
      $('#COMPSNT_NM').change(function() { 
       getDesc(); 
      }); 
     }); 
</script> 

控制器:

@RequestMapping(value = "desclist.json") 
@ResponseStatus(HttpStatus.OK) 
public @ResponseBody List<String> sectionList(@RequestParam(value = "sel1Id", required = true) String sel1Id, 
     ModelMap modelMap) { 

    List<PARAM_SEQ_2> list = new ArrayList<>(); 
    List<String> list2 = new ArrayList<>(); 
    list = paramSeq2Service.findByField2(sel1Id); 
    for (PARAM_SEQ_2 prm : list) { 
     list2.add(prm.getCOMPSNT_DS()); 
    } 
    return list2; 

}