天天看點

freemarker與springMvc整合的坑

//這是controller
@Controller
@RequestMapping()
public class PageController {

    @RequestMapping(value = "/page/index",method={RequestMethod.GET})
    public ModelAndView index(){
        ModelAndView mav=new ModelAndView();
        mav.addObject("name","youmu daisuki");
        mav.setViewName("index");
        return mav;
    }

}
           
<?xml version="1.0" encoding="UTF-8"?>
<!--springmvc的配置如下所示:-->


<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.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.xsd">

    <context:component-scan base-package="com.youmu.maven.web.controller" >
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/></context:component-scan>
    <mvc:annotation-driven />
    <mvc:resources mapping="/WEB-INF/**" location="/WEB-INF/"/>
    <!--<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">-->
        <!--<property name="suffix" value=".html"/>-->
        <!--<property name="prefix" value="/WEB-INF/html/"/>-->
        <!--<property name="order" value="0"/>-->
    <!--</bean>-->
    <!-- freemarker -->
    <bean class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
    <property name="freemarkerSettings">
        <props>
            <prop key="template_update_delay">10</prop>
            <prop key="locale">zh_CN</prop>
        </props>
    </property>
</bean>
     <bean class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
            <property name="viewClass" value="org.springframework.web.servlet.view.freemarker.FreeMarkerView"/>
         <property name="cache" value="true"/>
            <property name="suffix" value=".ftl"/>
            <property name="prefix" value="/WEB-INF/ftl/"/>

     </bean>
</beans>
           

我試過後一直報

javax.servlet.ServletException: Could not resolve view with name 'index' in servlet with name 'spring-mvc'
	org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1237)
	org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1037)
	org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:980)
	org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:897)
	org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
	org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:622)
	org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
	org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)      

我看了有這個檔案啊,我跟源碼後發現路徑變成了WEB-INF/ftl/index.ftl,怎麼說應該是/WEB-INF/ftl/index.ftl的啊。後來我把

FreeMarkerConfigurer 的< property name ="templateLoaderPath" value ="" ></ property > 加上去就好了...我又試了試去掉prefix也不行,估計是這兩個都有null判斷(不是blank判斷)。希望碼友們少踩這個坑。。。