How to render a View using AJAX in Spring MVC How to render a View using AJAX in Spring MVC ajax ajax

How to render a View using AJAX in Spring MVC


This answer is to just confirm that the answer by axtavt works. It took me a minute to realize what he was suggesting, so I thought I'd post a code-snippet to help out anyone coming along behind me. Kudos go to him, though! :)


MyController.java

@Controllerpublic class MyController {    @RequestMapping( method=RequestMethod.GET, value="/mainView" )    public ModelAndView getMainView( ... ) {                /* do all your normal stuff here to build your primary NON-ajax view         * in the same way you always do         */                 }    /* this is the conroller's part of the magic; I'm just using a simple GET but you     * could just as easily do a POST here, obviously     */    @RequestMapping( method=RequestMethod.GET, value="/subView" )    public ModelAndView getSubView( Model model ) {        model.addAttribute( "user", "Joe Dirt" );        model.addAttribute( "time", new Date() );        return new ModelAndView( "subView" );    }}


mainView.jsp

(...)<script src="http://code.jquery.com/jquery-1.7.1.min.js"></script><script type="text/javascript">    function doAjaxPost() {        $.ajax({            type: "GET",            url: "subView",            success: function(response) {                $("#subViewDiv").html( response );            }        });    }</script><input type="button" value="GO!" onclick="doAjaxPost();" /><div id="subViewDiv"></div>(...)


subView.jsp

(...)<h3>    User Access Details</h3><p>    ${user} accessed the system on ${time}</p>(...)


And that's it! A thing of beauty; up to now, doing AJAX in Spring has been a huge pain... parsing big @ResponseBody's, building huge sets of HTML by concatenating stuff in JS... ugh... I can't believe how simple and awesome this approach is -- and wasn't aware of it until just now! :)


You can put this piece of page into a separate JSP and return a ModelAndView pointing to it from your method. There are no difference between AJAX and non-AJAX calls from that point.