我有一个 @Controller
,它有一个 @RequestMapping
将端点映射到我的 jsp 页面。在该 Controller 中,我使用 @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;
}
}
这工作正常,我可以在我的 jsp 页面上访问 myBean
。
<script type="text/javascript">
version = "${myBean.version}"
</script>
但是,我想将 Controller 移至 Java 配置中。我可以在我的 WebConfig
中使用 ViewController
完成相同的 @RequestMapping
。
@Override
public void addViewControllers(final ViewControllerRegistry viewControllerRegistry) {
viewControllerRegistry.addViewController("/myPage").setViewName("myPage");
}
现在,我需要将 myBean
添加为 @ModelAttribute
,以便可以在 myPage.jsp
上进行访问。我如何在 Java 配置中执行此操作?
编辑:这不是 this question 的重复项。这展示了如何使用 xml 配置来做到这一点。我想知道如何在我的 Java @Configuration
文件中执行此操作。
最佳答案
以下是我在 Java 配置中配置 InternalResourceViewResolver
的方法。您可以将 jsp 上需要访问的 bean 名称传递给 InternalResourceViewResolver
的 setExposedContextBeanNames
方法。
@Bean
public InternalResourceViewResolver getInternalResourceViewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/pages/");
resolver.setSuffix(".jsp");
resolver.setExposedContextBeanNames("myBean");
return resolver;
}
关于java - 如何向 Spring MVC View 公开 Spring bean?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33395147/