【问题标题】:How to call controller method from jsp using ajax如何使用ajax从jsp调用控制器方法
【发布时间】:2017-02-10 13:15:36
【问题描述】:

我正在使用 Spring Boot,Maven 3.2.5。 我正在使用 Spring Boot 遵循 mvc 模式来开发简单的 maven webapp。 我正在尝试从 jsp 调用 ajax 的控制器方法。

这是我的jsp javascript方法的样子,它调用ajax调用来调用控制器方法。

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

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

Bellow 是我的控制器类。

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

当我运行我的应用程序时,我可以从下面的 url 访问 login.jsp http://localhost:9090/seperation-management/pages/login.jsp

当我点击提交按钮时,我的 jsp 页面 javascript 方法也被调用,即 alert("listExistingUser"); 但我无法调用我的控制器方法。

我在哪里犯错。谁能帮帮我。

【问题讨论】:

    标签: ajax spring jsp spring-mvc


    【解决方案1】:

    在控制器方法中有一些更改

    @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){}
    

    如果你想从这样的 url 中获取值 siteName/listExistingUser?id=1 那就改用这个方法吧。

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

    【讨论】:

      【解决方案2】:

      此示例在我的应用程序中运行:

      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;
      
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-06-22
        • 2017-05-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-16
        • 1970-01-01
        相关资源
        最近更新 更多