2016-12-18 3 views
1

Весной MVC, когда запрос отправляется, DispatcherServlet указывает HandlerMapping, который указывает, какой контроллер должен обрабатывать запрос. Controller обрабатывает запрос и возвращает модель с указанными View.Вид с ModelAndView против ViewResolver

И я не понимаю, что происходит после этого, когда ViewResolver начинает свою работу. Если View уже задан Controller, почему есть слой ViewResolver? Что это на самом деле? Не следует ли указывать View перед или паралектором с помощью Controller? Или, может быть, Controller должен вызвать слой ViewResolver?

ответ

4

В ViewResolver карты просмотреть имена фактической views.when вас есть, например:

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
     <property name="prefix" value="/WEB-INF/views/"/> 
     <property name="suffix" value=".jsp"/> 
</bean> 

вы говорите весной в методе контроллера, когда вы возвращаете строку, добавьте префикс и суффикс возвращаемого значения и нагрузки, вид, позволяет сказать, у вас есть

@RequestMapping("/") 
public String home() { 
    return "home"; 
} 

ViewResolver заберет домой и изменить его на home.jsp и будет смотреть на/WEB-INF/просмотров/загрузить /WEB-INF/views/home.jsp

+0

Слой ViewResolver запускается только тогда, когда вы возвращаете имя представления как String, а не указанный вид? – nowszy94

+1

действительно, в контроллере каждый вид должен быть переведен таким образом, чтобы весна могла его разрешить. Это представление может быть pdf, JSON, html, jsp, xml и т. Д. Строка не может сказать весне, как разрешать эти представления, не используя ViewResolver –

Смежные вопросы