2014-09-24 56 views
2

我已經有點看了一眼,似乎無法找到我遇到的場景的帖子。Spring Framework 4和Apache Tiles 3 - 沒有這樣的定義錯誤

我寫了一個利用Spring MVC 4和apache tiles 3的小型web應用程序。我使用apache tile來創建主頁面模板,以保持應用程序的外觀和感覺不變。我一直在eclipse中開發它,並通過IDE在Apache 8服務器上運行它。這一切都通過日食絕對正常運行,模板運行良好。

當我出口項目作爲一個.war文件和相同的Apache 8服務器上外面的IDE試圖查看使用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> 

的web.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> 

tiles.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> 

任何幫助,這將大大appriciated,我我只是不確定它爲什麼通過IDE工作,但不知道它何時導出。

在此先感謝。

菲爾

回答

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

這是正確的嗎?通常,它與所有支持的技術/WEB-INF/tiles.xml

+0

嗨mck,謝謝你的迴應。我已經嘗試了這兩種方法,並且都在IDE中工作,但是當我將該應用程序部署爲.war文件時沒有這樣做。我真的很努力地在網上找到任何答案。有任何想法嗎? – Phil1 2014-10-06 19:42:42

0

完全依賴瓷磚與以下依賴性聲明中實現:

只支持servlet
<dependency> 
    <groupId>org.apache.tiles</groupId> 
    <artifactId>tiles-extras</artifactId> 
    <version>3.0.5</version> 
</dependency> 

基本瓷磚的依賴,可以添加這樣:​​

<dependency> 
    <groupId>org.apache.tiles</groupId> 
    <artifactId>tiles-servlet</artifactId> 
    <version>3.0.5</version> 
</dependency> 

如果您需要依賴於瓷磚JSP支持,聲明依賴這種方式:

<dependency> 
    <groupId>org.apache.tiles</groupId> 
    <artifactId>tiles-jsp</artifactId> 
    <version>3.0.5</version> 
</dependency> 
0

我知道我正在回答一些舊的問題,但也許是正確的解決方案,它可以幫助其他人。

我覺得現在的問題是,你必須給定的順序來InternalResourceViewResolver這個,你忘了加上瓷磚,可能是這樣的觀點解析:

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

給人以另外的順序值= 2

相關問題