Нужно некоторое объяснение о BeanNameViewResolver - PullRequest
13 голосов
/ 12 сентября 2011

я читаю документацию здесь: http://static.springsource.org/spring/docs/2.0.x/api/org/springframework/web/servlet/view/BeanNameViewResolver.html

но я думаю, что весенняя документация иногда может быть сложной и трудной для понимания, поэтому мне не нужно много объяснений об этом классе.

Ответы [ 3 ]

23 голосов
/ 12 сентября 2011

Как описано в документации, BeanNameViewResolver разрешает View s, объявленные как bean-компоненты.Обычно это требуется для некоторых специальных представлений.

Представьте, например, что один из ваших контроллеров должен отображать электронную таблицу Excel.Таким образом, вы создаете подкласс AbstractExcelView и реализуете свою собственную логику для визуализации электронной таблицы на основе значений модели:

public class MyExcelView extends AbstractExcelView { ... }

и объявляете ее как bean-компонент:

<bean id = "myExcelView" class = "MyExcelView" />

Затем объявляете BeanNameViewResolver делает его доступным для контроллеров: когда контроллер возвращает ModelAndView с именем представления myExcelView, ваша электронная таблица будет визуализирована.

BeanNameViewResolver обычно используется в сочетании с каким-либо другим распознавателем представления, который обрабатывает «обычный»"views (так что если BeanNameViewResolver не может найти представление, другой распознаватель пытается его найти):

<bean class = "...BeanNameViewResolver">
    <property name = "order" value = "0" />
</bean>

<bean class = "...InternalResourceViewResolver">
    <property name = "order" value = "1" />
    ...
</bean>
8 голосов
/ 12 сентября 2011

На самом деле документация не фантастическая.

Средство сопоставления представлений весной mvc - это bean-компонент, который переводит имена представлений в представления.

Имя представления - это простая строка.Он возвращается методом handleRequest () контроллера в объекте ModelAndView.

ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) {
    ....
    return ModelAndView("thisIsTheViewName", ...);
}

Это имя представления преобразуется в фактический класс представления с помощью распознавателя представления.

BeanNameViewResolver имеет простойjob: Он ищет bean-компонент вида в applicationContext, у которого это имя представления является идентификатором.

<bean id="thisIsTheViewName" class="....MyView" />

Для простых приложений это может быть самый простой способ перевода названия вида в вид.

0 голосов
/ 10 марта 2019

Если вы ищете очень простой, но полный пример:

@Controller
public class MyController {

    @GetMapping("/hello")
    public String getHello() {
        return "helloView";
    }
}
@Component
public class HelloView extends AbstractView {

    @Override
    protected void renderMergedOutputModel(Map<String, Object> map,
              HttpServletRequest req, HttpServletResponse res) throws Exception {
        res.setContentType("text/plain");
        res.getOutputStream().println("hello world");
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...