2014-03-18 37 views
0

我正在使用tiles3來顯示模板佈局。但我得到一個例外。我試圖將視圖解析器更改爲URLbasedviewresolver。但錯誤是一樣的。如果我使用intenalviewresolver我能夠得到默認的index.jsp頁面。但它不顯示模板定義。請幫忙。使用tiles3無法顯示模板視圖spring mvc4

這是我的調度員serverlet代碼

<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:p="http://www.springframework.org/schema/p" 
     xmlns:mvc="http://www.springframework.org/schema/mvc" 
     xmlns:aop="http://www.springframework.org/schema/aop" 
     xmlns:tx="http://www.springframework.org/schema/tx" 
     xmlns:context="http://www.springframework.org/schema/context" 
     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd 
     http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd 
     http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd 
     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd 
     http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd"> 

    <context:component-scan base-package="registration" /> 

    <mvc:annotation-driven /> 

    <bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource"> 
    <property name="basenames" value="classpath:messages"/> 
    <property name="defaultEncoding" value="UTF-8"/> 
    </bean> 

    <bean id="viewResolver" class="org.springframework.web.servlet.view.tiles3.TilesViewResolver"> 
    <property name="viewClass" value="org.springframework.web.servlet.view.tiles3.TilesView"></property> 
</bean> 
<bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles3.TilesConfigurer"> 
    <property name="definitions" value="/WEB-INF/tiles-defs.xml"></property> 
    </bean> 

以下是我的瓷磚-defs.xml文件內容

<?xml version="1.0" encoding="UTF-8" ?> 

<!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 name="baseLayout" template="/WEB-INF/tiles/baseLayout.jsp"> 
     <put-attribute name="title" value="Template"/> 
     <put-attribute name="header" value="/WEB-INF/tiles/Header.jsp"/> 
     <put-attribute name="menu" value="/WEB-INF/tiles/Menu.jsp"/> 
     <put-attribute name="body" value="/WEB-INF/tiles/body.jsp"/> 
     <put-attribute name="footer" value="/WEB-INF/tiles/footer.jsp"/> 
    </definition> 

    <definition name="index" extends="baseLayout"> 
     <put-attribute name="body" value="/WEB-INF/jsp/index.jsp"/> 
    </definition> 

</tiles-definitions> 

這是控制器類

@RequestMapping("/index.htm") 
    public String index() 
    { 
      return "index"; 
    } 

的代碼以下是我得到的例外

javax.servlet.ServletException: Could not resolve view with name 'index' in servlet with name 'dispatcher' 
org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1208) 
org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1012) 
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959) 
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:876) 
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.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393) 

通過定義一個視圖屬性文件試圖與ResourceBundleViewResolver。這裏是改變調度servlet代碼

<bean id="viewResolver1" class="org.springframework.web.servlet.view.ResourceBundleViewResolver" 
    p:basename="views" p:order="1"/> 

<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver" 
     p:prefix="/WEB-INF/jsp/" p:suffix=".jsp" p:order="3" /> 

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

這裏是觀點性文件條目

index.(class)=org.springframework.web.servlet.view.tiles3.TilesView 
index.url=index 

現在下面是我得到

org.apache.tiles.definition.NoSuchDefinitionException: Unable to find the definition 'index' 
org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:218) 
org.apache.tiles.renderer.DefinitionRenderer.render(DefinitionRenderer.java:59) 
org.springframework.web.servlet.view.tiles3.TilesView.renderMergedOutputModel(TilesView.java:114) 
org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:266) 
org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1225) 
org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1012) 
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959) 
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:876) 
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.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393) 

回答

0

我已刪除並重新創建例外再次項目。這一次逐步修改了調度器servlet的內容。它正在工作。我能夠顯示瓷磚模板。我想我在早些時候給出命名空間和模式位置時犯了一些錯誤。我在這裏附加了修改過的調度程序servlet代碼。

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


    <mvc:annotation-driven /> 

    <context:component-scan base-package="registration" /> 


    <bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource"> 
    <property name="basenames" value="classpath:messages"/> 
    <property name="defaultEncoding" value="UTF-8"/> 
    </bean> 

    <bean id="viewResolver1" class="org.springframework.web.servlet.view.ResourceBundleViewResolver" 
     p:basename="views" /> 

    <bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles3.TilesConfigurer" > 
     <property name="definitions"> 
      <value>/WEB-INF/tilesdefs.xml</value> 
     </property> 
    </bean> 
    <bean id="viewResolver" 
      class="org.springframework.web.servlet.view.InternalResourceViewResolver" 
      p:prefix="/WEB-INF/jsp/" 
      p:suffix=".jsp" /> 
</beans>