如何将Spring bean暴露给Spring MVC View?

时间:2015-10-28 15:29:02

标签: java spring-mvc spring-java-config

我有一个@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";
    }
}

在我的配置文件中,我有@BeanInternalResourceViewResolver

@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;
    }
}

这很好用,我可以在我的jsp页面上访问myBean

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

但是,我想将控制器移动到Java Config中。我可以使用@RequestMapping中的ViewController完成相同的WebConfig

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

现在,我需要将myBean添加为@ModelAttribute,以便myPage.jsp可以访问。如何在Java Config中执行此操作?

编辑:这不是this question的重复。这表明你将如何使用xml配置。我想知道如何在我的Java @Configuration文件中执行此操作。

1 个答案:

答案 0 :(得分:3)

以下是我在Java Config中配置InternalResourceViewResolver的方法。您可以将jsp上需要访问的bean的名称传递给setExposedContextBeanNames的{​​{1}}方法。

InternalResourceViewResolver