Подтвердить что ты не робот

Как сделать вид с помощью AJAX в Spring MVC

Я использую Spring MVC, и мне нужно сделать асинхронный вызов на сервер и обновить только часть страницы.

На самом деле у меня есть контроллер, который возвращает строку. Я вызываю контроллер с помощью функции JQuery (.post()).

Проблема с моим решением заключается в том, что я не могу отображать JSP, как я, когда я использую ModelAndView как возвращаемый тип.

Есть ли способ вернуть представление уже обработанное?

Спасибо заранее.

Neuquino

4b9b3361

Ответ 1

Вы можете поместить эту часть страницы в отдельный JSP и вернуть ModelAndView, указывая на нее из вашего метода. Нет никакой разницы между вызовами AJAX и не AJAX с этой точки.

Ответ 2

Этот ответ должен просто подтвердить, что ответ от axtavt работает. Мне потребовалась минута, чтобы понять, что он предлагал, поэтому я подумал, что отправлю фрагмент кода, чтобы помочь кому-то прийти позади меня. Кудос идет к нему, хотя!:)


MyController.java

@Controller
public 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 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>

(...)


И это! Вещь красоты; до сих пор, делать AJAX в Spring было огромной болью... разбор большого @ResponseBody's, создание огромных наборов HTML путем конкатенации вещей в JS... тьфу... Я не могу поверить, насколько просты и удивительны этот подход - и не знал об этом до сих пор!:)