对Spring MVC控制器的Ajax调用返回jsp代码而不是jsp视图

时间:2018-06-26 07:29:47

标签: spring-mvc jsp

我希望我的ajax调用命中Spring mvc controller并返回一个jsp view

我已经编写了以下代码

$(document).on("click","#loginSubmit",function(event){

    var userName=$("#userName").val();
    var pwd=$("#password").val();

        var url = contextPath+"/authenticate";       
            $.ajax({        
                url : url,          
                type:"get",   
                data:"&userName="+userName+"&pwd="+pwd,  
                contentType:'application/json; charset=utf-8',  
                async: false,       
                success:function(response) 
                {        

                    console.log(response);
                }  
            }); 
});

这是我的控制器

@RequestMapping(value="/authenticate") 
    @ResponseBody
    public ModelAndView dashboard(@RequestParam("userName") String username,@RequestParam("pwd") String pwd) throws IOException
    { 
     boolean res=false; 


         try { 

    res=service.authenticate(username,pwd); 
         }
         catch (Exception e) {
            e.printStackTrace(); 
        }    
         if(res =true)
         {
             return new ModelAndView("dashboard");  
         }
         else {
             return new ModelAndView("login");
         }

    }

当我点击Submit时,它将返回jsp代码而不是jsp视图。

该怎么做,我的代码不正确吗?

2 个答案:

答案 0 :(得分:0)

这里有些杂乱的事情。 首先,您正在使用@ResponseBody,它将返回一个正文,而不是调用/ login。

第二,我了解到您由于身份验证需要使用ajax,但是如果身份验证成功,为什么不在javascript中调用/ dashboard。

observableArray

答案 1 :(得分:0)

Ajax调用总是希望控制器发出响应,因此,这种“ ajax调用会击中Spring mvc控制器并返回jsp视图”是不可能的。

您可以做的是从控制器获得成功响应后,您可以重定向到一个控制器方法URL,该URL将返回JSP页面

success:function(response) 
{        
window.location.href = "/urlToDashboard";
}  

并在控制器中:

@RequestMapping(value="urlToDashboard")
public String dashboardPage()
{ 
return "dashboard"; // return dashboard.jsp page
}