java - Spring Framework 4 & Apache Tiles 3 - 没有这样的定义错误

标签 java eclipse spring-mvc tomcat apache-tiles

我环顾四周,似乎找不到与我遇到的场景相关的帖子。

我编写了一个使用 Spring MVC 4 和 apache tiles 3 的小型 Web 应用程序。我使用 apache tiles 是因为我想创建一个母版页模板,以保持应用程序的外观和感觉不变。我一直在 eclipse 中开发它并通过 IDE 在 apache 8 服务器上运行它。这一切在 Eclipse 中都运行得非常好,模板也运行良好。

当我将项目导出为 .war 文件并在 IDE 之外的同一个 apache 8 服务器上运行它时,我在尝试查看使用 tiles 模板的页面时收到以下堆栈跟踪:

    2: <%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %>
3: <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
4:     pageEncoding="ISO-8859-1"%>
5: <tiles:insertDefinition name="defaultTemplate">
6:  <tiles:putAttribute name="body">
7: <div class="body"> 
8:  Hi <c:out value="${uacc_fname}"></c:out> <c:out value="${uacc_sname}"></c:out> welcome to the home page!!


Stacktrace:
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:568)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:470)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:403)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:347)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:209)
    org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:267)
    org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1221)
    org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1005)
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:952)
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:870)
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961)
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:852)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:618)
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    org.SouthC.Messwich.WebApp.FilterAuthCheck.doFilter(FilterAuthCheck.java:80)
root cause

org.apache.tiles.definition.NoSuchDefinitionException: Unable to find the definition 'defaultTemplate'
    org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:218)
    org.apache.tiles.template.InsertDefinitionModel.renderDefinition(InsertDefinitionModel.java:132)
    org.apache.tiles.template.InsertDefinitionModel.execute(InsertDefinitionModel.java:99)
    org.apache.tiles.jsp.taglib.InsertDefinitionTag.doTag(InsertDefinitionTag.java:254)
    org.apache.jsp.webapp.home_jsp._jspx_meth_tiles_005finsertDefinition_005f0(home_jsp.java:105)
    org.apache.jsp.webapp.home_jsp._jspService(home_jsp.java:77)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:403)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:347)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:209)
    org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:267)
    org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1221)
    org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1005)
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:952)
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:870)
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961)
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:852)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:618)
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    org.SouthC.Messwich.WebApp.FilterAuthCheck.doFilter(FilterAuthCheck.java:80)

    org.apache.jasper.JasperException: An exception occurred processing JSP page /webapp/home.jsp        at line 5

我已经检查过服务器确实可以读取 tiles.xml 定义文件,因为当我将它从指定的位置删除时,启动时会出现不同的错误。以下是我的配置文件:

servlet.xml

    <?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans     
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/mvc 
        http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
        http://www.springframework.org/schema/context 
        http://www.springframework.org/schema/context/spring-context-3.0.xsd">

    <context:component-scan base-package="org.test.WebApp"/>

    <mvc:annotation-driven/>

   <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
      <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
      <property name="prefix" value="" />
      <property name="suffix" value=".jsp" />
      <property name="order" value="1" />
   </bean>
    <bean id="tilesConfigurer"
        class="org.springframework.web.servlet.view.tiles3.TilesConfigurer">
        <property name="definitions">
            <list>
                <value>/tiles/tiles.xml</value>
            </list>
        </property>
    </bean>

    <mvc:resources mapping="/resources/**" location="/resources/" />

</beans>

网络.xml

    <?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>Messwich</display-name> 
  <servlet>
    <servlet-name>testWebApp</servlet-name>
    <servlet-class> org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>testhWebApp</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
</web-app>

瓷砖.xml

    <?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 id="defaultTemplate" name="defaultTemplate" template="/template/defaultTemplate.jsp">
        <put-attribute id="header" name="header" value="/template/header.jsp" />
        <put-attribute id="footer" name="footer" value="/template/footer.jsp" />
    </definition>

</tiles-definitions>

如有任何帮助,我将不胜感激,我只是不确定为什么它可以通过 IDE 工作,但在导出时却不能。

提前致谢。

菲尔

最佳答案

<value>/tiles/tiles.xml</value>

这是正确的吗?通常是/WEB-INF/tiles.xml

关于java - Spring Framework 4 & Apache Tiles 3 - 没有这样的定义错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26018079/

相关文章:

执行了Java垃圾回收,但未收到GC通知

java - 内部错误 (javaClasses.cpp :129)

java - PHP 开发应该在 Eclipse 中使用 JRE 还是 JDK?

spring - 如何在使用Spring MVC验证之前修剪请求参数值?

c# - 我应该将所有方法标记为虚拟吗?

java - 如何使用夏令时结束日期计算日期之间的剩余时间

java - 将Resin源导入Eclipse

java - Spring无法将MultiValueMap映射到bean

angularjs - 如何访问 AngularJs Controller 或服务中的 POJO 属性

java - 实现继承的抽象方法?