Ответ 1
Вы можете поместить эту часть страницы в отдельный JSP и вернуть ModelAndView
, указывая на нее из вашего метода. Нет никакой разницы между вызовами AJAX и не AJAX с этой точки.
Я использую Spring MVC, и мне нужно сделать асинхронный вызов на сервер и обновить только часть страницы.
На самом деле у меня есть контроллер, который возвращает строку. Я вызываю контроллер с помощью функции JQuery (.post()).
Проблема с моим решением заключается в том, что я не могу отображать JSP, как я, когда я использую ModelAndView как возвращаемый тип.
Есть ли способ вернуть представление уже обработанное?
Спасибо заранее.
Neuquino
Вы можете поместить эту часть страницы в отдельный JSP и вернуть ModelAndView
, указывая на нее из вашего метода. Нет никакой разницы между вызовами AJAX и не AJAX с этой точки.
Этот ответ должен просто подтвердить, что ответ от 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... тьфу... Я не могу поверить, насколько просты и удивительны этот подход - и не знал об этом до сих пор!:)