BeanNameViewResolver maps a view name to a bean name in the current application context. The matching bean must implement the View interface so that it can be executed by DispatcherServlet to render the view.
Example
A custom view
public class MyCustomView implements View {
@Override
public String getContentType() {
return "text/html";
}
@Override
public void render(Map<String, ?> model, HttpServletRequest request,
HttpServletResponse response) throws Exception {
response.setContentType(getContentType());
PrintWriter writer = response.getWriter();
writer.println("This is my custom dummy view.<br/>");
writer.println("<h3>Model attributes</h3>");
for (Map.Entry<String, ?> entry : model.entrySet()) {
writer.printf("%s = %s<br/>", entry.getKey(), entry.getValue());
}
}
}
Registering BeanNameViewResolver and the view as Bean
@EnableWebMvc
@Configuration
@ComponentScan
public class MyWebConfig {
@Bean
public ViewResolver viewResolver() {
return new BeanNameViewResolver();
}
@Bean("simpleView")
public View myCustomView() {
return new MyCustomView();
}
}
Alternative way to register BeanNameViewResolver
As an alternative to above configuration, we can enable BeanNameViewResolver by overriding configureViewResolvers() method of WebMvcConfigurerAdapter:
public class MyWebConfig extends WebMvcConfigurerAdapter {
@Override
public void configureViewResolvers (ViewResolverRegistry registry) {
registry.beanName();
}
@Bean("simpleView")
public View myCustomView() {
return new MyCustomView();
}
}
Writing a Controller
The controller that is going to return our bean name as the view name.
@Controller
@RequestMapping("/")
public class MyController {
@RequestMapping
public String handleRequest (Model model) {
model.addAttribute("msg", "A message from the controller");
model.addAttribute("time", LocalTime.now());
return "simpleView";
}
}
Output
Example ProjectDependencies and Technologies Used: - spring-webmvc 4.3.10.RELEASE: Spring Web MVC.
- javax.servlet-api 3.1.0 Java Servlet API
- JDK 1.8
- Maven 3.3.9
|