【问题标题】:javax.servlet.ServletException: Could not resolve view with name 'home' in servlet with name 'dispatcher'javax.servlet.ServletException:无法解析名称为“dispatcher”的 servlet 中名称为“home”的视图
【发布时间】: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 可选,那么你需要编写
  • &lt;%@ include file="/WEB-INF/views/includes/taglibs.jsp" %&gt; &lt;html&gt; &lt;head&gt; &lt;tiles:insertAttribute name="meta"/&gt; &lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8"&gt; &lt;title&gt;&lt;/title&gt; &lt;/head&gt; &lt;body&gt; &lt;tiles:insertAttribute name="navbar"/&gt; &lt;tiles:insertAttribute name="body"/&gt; &lt;tiles:insertAttribute name="footer"/&gt; &lt;/body&gt; &lt;/html&gt; 这就是我的 baseLayout.jsp 的样子。
  • 您需要将此代码添加到您的 元素中,如下所示,<b><title><getasstring name="title"></getasstring>跨度>

标签: java jsp spring-mvc tiles


【解决方案1】:

在您的 tile 定义文件中,您放置了 title 属性,但在您的 baseLayout.jsp 文件中您没有放置它。您需要在 baseLayout.jsp 文件的&lt;title&gt; 元素中添加以下代码

<title><tiles:getAsString name="title"/></title>

【讨论】:

    猜你喜欢
    • 2015-07-11
    • 2015-08-10
    • 1970-01-01
    • 1970-01-01
    • 2018-06-02
    • 2015-01-18
    • 2017-05-04
    • 1970-01-01
    • 2016-09-15
    相关资源
    最近更新 更多