Как визуализировать представление с использованием AJAX в Spring MVC - PullRequest
26 голосов
/ 27 января 2011

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

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

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

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

Заранее спасибо.

Neuquino

Ответы [ 2 ]

59 голосов
/ 21 марта 2012

Этот ответ просто подтверждает, что ответ от 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'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" );
    }

}

1010 *
*

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>

(...)

1024 *
*

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

16 голосов
/ 27 января 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...