2014-09-24 3 views
2

저는 약간의 둘러보기가 있었고, 내가 만났던 시나리오를 가진 게시물을 찾지 못하는 것 같습니다.스프링 프레임 워크 4 & Apache Tiles 3 - 그런 정의 오류가 없습니다.

저는 스프링 MVC 4와 아파치 타일 3을 사용하는 작은 웹 앱을 작성했습니다. 애플리케이션의 모양과 느낌을 일정하게 유지하기 위해 마스터 페이지 템플릿을 만들고 싶었 기 때문에 아파치 타일을 사용하고 있습니다. 나는 이클립스에서 이것을 개발하고 IDE를 통해 아파치 8 서버에서 실행했다. 이것은 모두 일식을 통해 절대적으로 잘 실행되었고 templating은 잘 작동하고있었습니다.

나는 .war 파일로 프로젝트를 수출하고 타일 템플릿 사용하는 페이지 보려고 할 때 IDE의 나는 다음과 같은 스택 추적을 수신하고 외부와 동일한 아파치 8 서버에 그것을 실행 한

:

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 정의 파일을 읽을 수 있음을 확인했습니다. 시작시 다른 오류가 발생합니다. 다음은 내 구성 파일은 다음과 같습니다 이것에 어떤 도움이 많이 appriciated 될 것이다

<?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 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> 

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에, 나는 IDE를 통해 작동하는 이유는 모르지만 내보낼 때는 확실하지 않습니다.

미리 감사드립니다.

답변

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

이 맞습니까? 단지 서블릿 지원

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

기본 타일 의존성이 방법을 추가 할 수 있습니다 : 종종는 지원되는 모든 기술과 /WEB-INF/tiles.xml

+0

안녕하세요, 귀하의 회신에 감사드립니다. IDE에서 두 가지 방법 모두 시도했지만, .war 파일로 앱을 배포 할 때는 그렇지 않습니다. 정말 그물에 대한 답변을 찾는 데 어려움을 겪고 있습니다. 어떤 아이디어? – Phil1

0

전체 타일 의존성은 다음과 같은 의존성 선언 달성의

<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> 
,691을
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