Java、Spring、Apache Tiles错误:无法解析名为';指数';在名为';调度员';

Java、Spring、Apache Tiles错误:无法解析名为';指数';在名为';调度员';,java,spring-mvc,apache-tiles,Java,Spring Mvc,Apache Tiles,我是Tiles和SpringMVC的新手(我查看了几个类似的问题,但没有找到“我的问题”的解决方案) 控制器: @Controller public class IndexController { @RequestMapping("/index") public String index(){ return "index"; } } 我的“general.xml”包含瓷砖定义: <tiles-definitions> <definit

我是Tiles和SpringMVC的新手(我查看了几个类似的问题,但没有找到“我的问题”的解决方案)

控制器:

@Controller
public class IndexController {

    @RequestMapping("/index")
    public String index(){
        return "index";
    }
}
我的“general.xml”包含瓷砖定义:

<tiles-definitions>
<definition name="common" template="/WEB-INF/layout/classic.jsp">
    <put-attribute name="footer" value="/WEB-INF/layout/footer.jsp" />
</definition>

<definition name="index" extends="common">
    <put-attribute name="title" value="My First Application" />
    <put-attribute name="body" value="/WEB-INF/jsp/index.jsp" />
</definition>
dispatcher-servlet.xml:

<bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles3.TilesConfigurer">
    <property name="definitions">
        <list>
            <value>/WEB-INF/defs/general.xml</value>
        </list>
    </property>
</bean>

<bean id="viewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">
    <property name="viewClass" value="org.springframework.web.servlet.view.tiles3.TilesView"/>  
</bean>

/WEB-INF/defs/general.xml
web.xml

  <servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>*.html</url-pattern>
    <url-pattern>*.htm</url-pattern>
    <url-pattern>*.json</url-pattern>
    <url-pattern>*.xml</url-pattern>
</servlet-mapping>

调度员
org.springframework.web.servlet.DispatcherServlet
1.
调度员
*.html
*.htm
*.json
*.xml

问题非常简单。 将web.xml替换为

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
  <display-name>my-first-app</display-name>


  <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

我的第一个应用程序
调度员
org.springframework.web.servlet.DispatcherServlet
1.
调度员
/
我还向pom添加了jstl依赖项

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
</dependency>

javax.servlet
jstl
1.2

在这些更改之后,对
localhost:8080/index
的请求正确地呈现了相应的响应

我今天也遇到了同样的问题。我在春天也是新手,所以我不知道从哪里开始。经过漫长的一天,我终于找到了答案:

我的default.xml文件错误。我做了一些手工重构,这造成了所有的麻烦。这是一个错误的例子:

<definition name="tos.base" template="/WEB-INF/templates/default.jsp">
<put-attribute name="includes" value="" ></put-attribute>
<put-attribute name="title" value="Title" ></put-attribute>
<put-attribute name="header" value="/WEB-INF/tiles/header.jsp"></put-attribute>
<put-attribute name="content" value="/WEB-INF/tiles/content.jsp"></put-attribute>
<put-attribute name="footer" value="/WEB-INF/tiles/footer.jsp"></put-attribute>
</definition>

<definition name="home" extends="tos.base">
<put-attribute name="title" value="Homepage" ></put-attribute>
<put-attribute name="content" value="/WEB-INF/tiles/home.jsp"></put-attribute>
</definition>

<definition name="current" extends="to.base">
<put-attribute name="title" value="Current" ></put-attribute>
<put-attribute name="content" value="/WEB-INF/tiles/current.jsp"></put-attribute>
</definition>

正如您所看到的,在上一个定义“extends”值中,我的值是错误的。
我发现这种从tiles3.TilesViewResolver降级到tiles2.TilesViewResolver的情况,并提供了一条更有用的错误消息。

尝试将
IndexController.index()
的返回值从
“/WEB-INF/jsp/index.jsp”
更改为
“index”
。这对我很有用:

@RequestMapping("/index")
public String index() {
    return "index";
}
我也有同样的问题。 尝试在tiles配置文件中使用正确版本的DTD

也在tiles定义文件general.xml中 使用平铺:插入属性而不是平铺:添加属性

<tile:insertAttribute name="body"/>
     <br />
<tile:insertAttribute name="footer" />



问题在于项目位置

jetty、ApacheTiles和spring的视图解析器的组合在该位置有空间时不起作用

例如:项目位置-D:\folder whitespace\your\u项目 将引发上述错误-无法在名为“dispatcher”的servlet中解析名为“index”的视图


解决方案-请将项目位置更改为没有空格的路径。

项目路径中可能有空格:


你看过本教程了吗?没有,我已经学习了另一个教程,但不明白错误出在哪里了。你有什么错误,或者在GitHub上编写代码,或者其他什么,我可以试试吗?非常感谢,这一定是一些愚蠢的错误,但我不知道Madery是在哪里用Maven进行干净的编译的。它对我来说对Tomcat和embedded Jettyok和jstl都有效——它在VMware vFabric tc Server Developer Edition v2.9-config服务器上的工作,但在jetty上仍然不起作用……而且我也没有更改我的servlet映射,所以问题一定在其他地方——如果您遵循我更新的答案,代码也应该在jetty上工作。我验证了很多次这很奇怪。。。您是否用最新的更改更新了GitHub存储库,以便我可以再次查看?GirHub存储库已更新。正如我所说,我的(和你的)代码在tomcat上工作得很好,但在jetty上尝试时仍然有错误
<tile:insertAttribute name="body"/>
     <br />
<tile:insertAttribute name="footer" />