2012-07-18 4 views
1

저는 Spring MVC 프로젝트를 가지고 있으며 Apache Tiles를 사용하여 어플리케이션에서 뷰를 만들고 싶습니다. 내 pom.xml 파일에 몇 가지 종속성을 추가했습니다. 나는 너무 많은 것을 가지고 있을까 궁금하지만 수업을 빠뜨린 것에 대한 예외를 몇 가지 가지고있어서 클래스 패스에 추가했습니다.Spring MVC에서 TilesViewResolver를 올바르게 설정하는 방법은 무엇입니까?

<!-- Tiles --> 
    <dependency> 
     <groupId>org.apache.tiles</groupId> 
     <artifactId>tiles-extras</artifactId> 
     <version>2.2.2</version> 
    </dependency>   
    <dependency> 
     <groupId>org.apache.tiles</groupId> 
     <artifactId>tiles-jsp</artifactId> 
     <version>2.2.2</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.tiles</groupId> 
     <artifactId>tiles-core</artifactId> 
     <version>2.2.2</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.tiles</groupId> 
     <artifactId>tiles-servlet</artifactId> 
     <version>2.1.4</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.commons</groupId> 
     <artifactId>commons-digester3</artifactId> 
     <version>3.2</version> 
     <classifier>with-deps</classifier> 
    </dependency> 
    <dependency> 
     <groupId>commons-beanutils</groupId> 
     <artifactId>commons-beanutils</artifactId> 
     <version>1.8.3</version> 
    </dependency> 

이 디스패처 서블릿 컨텍스트 내 ViewResolvers 구성이다. 나는 그들을 함께 올바르게 구성하는 방법을 궁금해.

<beans:bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles2.TilesConfigurer"> 
    <beans:property name="definitions"> 
     <beans:list> 
      <beans:value>/WEB-INF/tiles-definitions.xml</beans:value> 
     </beans:list> 
    </beans:property> 
</beans:bean> 

<beans:bean id="tilesViewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver"> 
    <beans:property name="viewClass" value="org.springframework.web.servlet.view.tiles2.TilesView" /> 
    <beans:property name="order" value="0" /> 
</beans:bean> 

<beans:bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
    <beans:property name="prefix" value="/WEB-INF/views/" /> 
    <beans:property name="suffix" value=".jsp" /> 
    <beans:property name="order" value="1" /> 
</beans:bean> 

이 질문을 읽고 대답했다 : How to use multiple ViewResolvers in Spring?를하지만 나를 위해 도움이되지 않았습니다. 위의 구성으로이 순간에 jsp보기가 제대로 작동하지만 타일 주소로는 HTTP Status 404이 표시됩니다.

편집

이 내 컨트롤러입니다. "집"과 연결된보기는 작동하지만 타일은 작동하지 않습니다. 그들은이 튜토리얼에서 온

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE tiles-definitions PUBLIC 
    "-//Apache Software Foundation//DTD Tiles Configuration 2.0//EN" 
    "http://tiles.apache.org/dtds/tiles-config_2_0.dtd"> 
<tiles-definitions> 

    <definition name="template-main" template="/WEB-INF/views/layouts/main.jsp"> 
    <put-attribute name="banner-content" value="/WEB-INF/views/sections/banner.jsp" /> 
    <put-attribute name="title-content" value="Pet Type" /> 
    <put-attribute name="primary-content" value="" /> 
    <put-attribute name="footer-content" value="/WEB-INF/views/sections/footer.jsp" /> 
    </definition> 

    <definition name="template-detail" template="/WEB-INF/views/layouts/detail.jsp"> 
    <put-attribute name="banner-content" value="/WEB-INF/views/sections/banner.jsp" /> 
    <put-attribute name="title-content" value="Pet Type" /> 
    <put-attribute name="subtitle-content" value="" /> 
    <put-attribute name="primary-content" value="" /> 
    <put-attribute name="footer-content" value="/WEB-INF/views/sections/footer.jsp" /> 
    </definition> 

    <definition name="pet-tiles" extends="template-main"> 
    <put-attribute name="primary-content" value="/WEB-INF/views/contents/pets.jsp" /> 
    </definition> 

    <definition name="dog-tiles" extends="template-detail"> 
    <put-attribute name="subtitle-content" value="Canines" /> 
    <put-attribute name="primary-content" value="/WEB-INF/views/contents/dogs.jsp" /> 
    </definition> 

    <definition name="cat-tiles" extends="template-detail"> 
    <put-attribute name="subtitle-content" value="Felines" /> 
    <put-attribute name="primary-content" value="/WEB-INF/views/contents/cats.jsp" /> 
    </definition> 

</tiles-definitions> 

: http://krams915.blogspot.com/2010/12/spring-mvc-3-tiles-2-integration.html하지만 나를 위해 작동하지

@RequestMapping(value = "/", method = RequestMethod.GET) 
public String home(Locale locale, Model model) {   
    return "home"; 
} 

@RequestMapping(value = "/pets", method = RequestMethod.GET) 
public String pets(Locale locale, Model model) { 
    return "pets-tiles"; 
} 

@RequestMapping(value = "/dogs", method = RequestMethod.GET) 
public String dogs(Locale locale, Model model) { 
    return "dogs-tiles"; 
} 

@RequestMapping(value = "/cats", method = RequestMethod.GET) 
public String cats(Locale locale, Model model) { 
    return "cats-tiles"; 
} 

는 그리고 이것은 내 tiles-definitions.xml 파일입니다.

+0

Tiles 구성 파일과 컨트롤러 클래스의 일부 코드를 게시 할 수 있습니까? – davioooh

+0

방금 ​​내 질문을 편집했습니다. 그것을 확인해 주시겠습니까? – woyaru

답변

1

문제가 해결되었습니다. 왜 그것이 작동하지 않았는지 모르겠지만이 순간에는 모든 것이 괜찮은 것 같습니다.

나는 발견하고이 URL에서 AutoTilesView 클래스를 구현 한 : http://forum.springsource.org/showthread.php?78312-Spring-MVC-Noob-help-with-site-templates

왜 기본 TilesView가 작동하지 않는? AutoTilesView 클래스는 다음과 같습니다

public class AutoTilesView extends TilesView { 

private static final String PREFIX = "/WEB-INF/views/"; 
private static final String SUFFIX = ".jsp"; 

@Override 
protected void renderMergedOutputModel(Map<String, Object> model, 
     HttpServletRequest request, HttpServletResponse response) 
     throws Exception { 

    ServletContext servletContext = getServletContext(); 
    TilesContainer container = ServletUtil.getContainer(servletContext); 

    if (container == null) { 
     throw new ServletException("Tiles container is not initialized. " + 
       "Have you added a TilesConfigurer to your web application context?"); 
    } 

    AttributeContext attributeContext = container.getAttributeContext(request, response); 

    StringBuilder builder = new StringBuilder(); 
    builder.append(PREFIX); 
    builder.append(this.getUrl()); 
    builder.append(SUFFIX);  

    attributeContext.putAttribute("body", Attribute.createTemplateAttribute(builder.toString())); 

    super.renderMergedOutputModel(model, request, response); 
} 
} 

그리고 이것은 내 Serlvet 디스패처 컨텍스트에서 코드입니다 : 내가 org.springframework.web.servlet.view.InternalResourceViewResolver을 제거한

<beans:bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles2.TilesConfigurer"> 
    <beans:property name="definitions"> 
     <beans:list> 
      <beans:value>/WEB-INF/tiles-definitions.xml</beans:value> 
     </beans:list> 
    </beans:property> 
</beans:bean> 

<beans:bean id="viewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver"> 
    <beans:property name="viewClass" value="cos.tam.AutoTilesView" /> 
</beans:bean> 

.

+1

이것은 예를 들어 Tiles 2.2.2를위한 해결책입니다. Tiles 3.0의 경우 어떻게 될지 궁금합니다. – woyaru

관련 문제