Как вы предоставляете Spring bean-компоненты для представления Spring MVC?

У меня есть @Controller, у которого есть @RequestMapping для сопоставления конечной точки с моей страницей jsp. В этом контроллере я использую аннотацию @ModelAttribute, чтобы сделать @Bean, который у меня есть в моем файле конфигурации, доступным в моем jsp.

@Controller
public class WebPageController {

    @Autowired
    private MyBean myBean;

    @ModelAttribute
    public MyBean myBean() {
        return myBean;
    }

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

В моем файле конфигурации у меня есть @Bean и InternalResourceViewResolver.

@Configuration
@EnableWebMvc
@ComponentScan({"my.package"})
public class WebConfig extends WebMvcConfigurerAdapter {
    @Bean
    public MyBean myBean {
        return new MyBean();
    }

    @Bean
    public InternalResourceViewResolver getInternalResourceViewResolver() {
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix("/WEB-INF/pages/");
        resolver.setSuffix(".jsp");
        return resolver;
    }
}

Это отлично работает, и я могу получить доступ к myBean на моей странице jsp.

<script type="text/javascript">
    version = "${myBean.version}"
</script>

Однако я хочу переместить свой контроллер в конфигурацию Java. Я могу выполнить то же самое @RequestMapping, используя ViewController в своем WebConfig.

@Override
public void addViewControllers(final ViewControllerRegistry viewControllerRegistry) {
    viewControllerRegistry.addViewController("/myPage").setViewName("myPage");
}

Теперь мне нужно добавить myBean как @ModelAttribute, чтобы он был доступен на myPage.jsp. Как я могу сделать это в конфигурации Java?

EDIT: Это не дубликат этого вопроса< /а>. Это показывает, как вы могли бы сделать это с конфигурацией xml. Я хотел бы знать, как это сделать в моем файле Java @Configuration.


person Andrew Mairose    schedule 28.10.2015    source источник
comment
Вы не сможете добавлять атрибуты модели через реестр контроллера. Вместо этого настройте InternalResourceViewResolver так, чтобы bean-компоненты отображались в JSP (через атрибуты запроса, что эквивалентно тому, что происходит с атрибутами модели).   -  person Sotirios Delimanolis    schedule 28.10.2015
comment
@ Боанн и ОП, ответ в том, что вам нужно настроить файл InternalResourceViewResolver. Делаете ли вы это в XML или Java, не имеет значения.   -  person Sotirios Delimanolis    schedule 29.10.2015


Ответы (1)


Вот как мне удалось настроить InternalResourceViewResolver в конфигурации Java. Вы можете передать имя bean-компонентов, к которым вам нужен доступ на jsp, в метод setExposedContextBeanNames метода InternalResourceViewResolver.

@Bean
public InternalResourceViewResolver getInternalResourceViewResolver() {
    InternalResourceViewResolver resolver = new InternalResourceViewResolver();
    resolver.setPrefix("/WEB-INF/pages/");
    resolver.setSuffix(".jsp");
    resolver.setExposedContextBeanNames("myBean");
    return resolver;
}
person Andrew Mairose    schedule 29.10.2015