【发布时间】:2014-10-30 14:59:08
【问题描述】:
在运行 Web 应用程序时获取 javax.servlet.ServletException: Could not resolve view with name 'home' in servlet with name 'dispatcher'。 @RequestMapping 对我来说,瓦片配置和映射看起来不错,但仍然出现错误。
这里是 WebAppInitializr.java
public class WebAppInitializer implements WebApplicationInitializer {
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
AnnotationConfigWebApplicationContext rootContext = new AnnotationConfigWebApplicationContext();
rootContext.register(RootConfig.class, MessageSourceConfig.class);
servletContext.addListener(new ContextLoaderListener(rootContext));
AnnotationConfigWebApplicationContext dispatcherServlet = new AnnotationConfigWebApplicationContext();
dispatcherServlet.register(WebMvcConfig.class);
ServletRegistration.Dynamic dispatcher = servletContext.addServlet("dispatcher", new DispatcherServlet(dispatcherServlet));
dispatcher.setLoadOnStartup(1);
dispatcher.addMapping("/");
}
}
还有 WebAppConfig
@EnableWebMvc
@ComponentScan(basePackages = { "com.examples" })
@Configuration
public class WebMvcConfig extends WebMvcConfigurerAdapter {
private static final String TILES_VIEW_RESOLVER_DEFINITION = "/WEB-INF/tiles/tiles_configuration.xml";
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/assets/**").addResourceLocations("/assets/").setCachePeriod(31556926);
}
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
@Bean
public TilesViewResolver tilesViewResolver() {
TilesViewResolver tilesViewResolver = new TilesViewResolver();
tilesViewResolver.setOrder(2);
return tilesViewResolver;
}
@Bean
public UrlBasedViewResolver viewResolver() {
UrlBasedViewResolver viewResolver = new UrlBasedViewResolver();
viewResolver.setViewClass(TilesView.class);
return viewResolver;
}
@Bean
public TilesConfigurer tilesConfigurer() {
TilesConfigurer tilesConfigurer = new TilesConfigurer();
tilesConfigurer.setDefinitions(new String[] { TILES_VIEW_RESOLVER_DEFINITION });
tilesConfigurer.setCheckRefresh(true);
return tilesConfigurer;
}
}
我在控制器中的请求映射是:
@RequestMapping(value = "/", method = RequestMethod.GET)
还有瓷砖定义:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE tiles-definitions PUBLIC
"-//Apache Software Foundation//DTD Tiles Configuration 3.0//EN"
"http://tiles.apache.org/dtds/tiles-config_3_0.dtd">
<tiles-definitions>
<definition name="defaultTemplate" template="/WEB-INF/views/templates/baseLayout.jsp">
<put-attribute name="meta" value="/WEB-INF/views/templates/meta.jsp" />
<put-attribute name="navbar" value="/WEB-INF/views/templates/navbar.jsp" />
<put-attribute name="body" value="" />
<put-attribute name="footer" value="/WEB-INF/views/templates/footer.jsp" />
</definition>
<definition name="home" extends="defaultTemplate">
<put-attribute name="title" value="Home" />
<put-attribute name="body" value="/WEB-INF/views/home.jsp" />
</definition>
</tiles-definitions>
我们将不胜感激任何解决此问题的帮助。
【问题讨论】:
-
您好,Thunder,您能展示一下您的 baseLayout.jsp 页面吗?我今天也面临这个错误并且能够解决它。您需要通过以下方式在 baseLayout.jsp 中指定 meta、navbar、body 和 footer,
。如果你想让一些 tile 可选,那么你需要编写 -
<%@ include file="/WEB-INF/views/includes/taglibs.jsp" %> <html> <head> <tiles:insertAttribute name="meta"/> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title></title> </head> <body> <tiles:insertAttribute name="navbar"/> <tiles:insertAttribute name="body"/> <tiles:insertAttribute name="footer"/> </body> </html>这就是我的 baseLayout.jsp 的样子。 -
您需要将此代码添加到您的
元素中,如下所示, 跨度>
标签: java jsp spring-mvc tiles