Results 1 to 9 of 9

Thread: Spring 3.1.1 java based configuration issue of FreeMarkerConfigurer

  1. #1
    Join Date
    Mar 2012
    Posts
    14

    Default Spring 3.1.1 java based configuration issue of FreeMarkerConfigurer

    Hello,
    I have been tring to use the FreeMarker as a view resolver.

    When I debug it fires an exception at:
    Code:
    FreeMarkerConfigurer configurer = new FreeMarkerConfigurer();
    the exception states:
    "java.lang.NoClassDefFoundError: freemarker/cache/TemplateLoader"
    I have used :

    Code:
      @Bean
        public ViewResolver viewResolver() {
            UrlBasedViewResolver viewResolver = new UrlBasedViewResolver();
            viewResolver.setViewClass(FreeMarkerView.class);
            return viewResolver;
        }
    
        @Bean
        public FreeMarkerConfigurer freeMarkerConfigurer() {
            FreeMarkerConfigurer configurer = new FreeMarkerConfigurer();
            configurer.setTemplateLoaderPath(
                    "/WEB-INF/views/**/freemarker.xml");
            return configurer;
        }

  2. #2
    Join Date
    Mar 2012
    Posts
    6

    Default

    It looks like Freemarker is not in your runtime classpath.


    --AT
    http://www.jmolly.com

  3. #3
    Join Date
    Mar 2012
    Posts
    14

    Default

    Your first post makes me look goofy ...just kidding
    Yes I was missing to add the dependecy at the maven file.

    I am now facing "javax.servlet.ServletException".
    However, I have added the freemarker.xml and adjusted my controller to return the freemarker view.

    Freemarker.xml:

    Code:
    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xmlns="http://www.springframework.org/schema/beans"
    	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">    
    
        <!-- freemarker config -->
        <bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
          <property name="templateLoaderPath" value="/WEB-INF/freemarker/"/>
          <property name="freemarkerSettings">
              <props>
                  <prop key="number_format">0.######</prop>
              </props>
          </property>
          <property name="freemarkerVariables">
            <map>
              <entry key="xml_escape" value-ref="fmXmlEscape"/>
            </map>
          </property>
        </bean>
      
        <bean id="fmXmlEscape" class="freemarker.template.utility.XmlEscape"/>
        
    
        <!--
    
          View resolvers can also be configured with ResourceBundles or XML files. If you need
          different view resolving based on Locale, you have to use the resource bundle resolver.
    
        -->
        <bean id="viewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
            <property name="cache" value="true"/>
            <property name="prefix" value=""/>
            <property name="suffix" value=".ftl"/>
        </bean>
    
    </beans>
    Controller :
    Code:
    	@RequestMapping(value="/", method=RequestMethod.GET)
    	public ModelAndView home(Principal user) {
            return new ModelAndView("/welcome");
    	}
    The "welcome.ftl" is under WEB-INF/freemarker directory.

    The exception I get :

    HTML Code:
    javax.servlet.ServletException: Could not resolve view with name '/welcome' in servlet with name 'appServlet'
    	org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1139)
    	org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:927)
    	org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:827)
    	org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)
    	org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:778)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:722)

  4. #4
    Join Date
    Mar 2012
    Posts
    6

    Default

    I ran your example through Heatlamp [1]. It looks like Spring is appending the "ftl" extension onto your view name. Do you see the double "ftl" extensions?

    FreeMarkerExample.jpg

    When I return new ModelAndView("welcome"), without the "ftl" extension, it works for me.

    --AD

    [1] http://www.jmolly.com/heatlamp

  5. #5
    Join Date
    Mar 2012
    Posts
    14

    Default

    Frankly, I have tried several trials such as removing the postfix ".ftl" from freemarker.xml ,use "return new ModelAndView("/welcome")" ,etc. in order to remove that .ftl duplication.
    However,I still have the same issue.

  6. #6
    Join Date
    Mar 2012
    Posts
    6

    Default

    This works for me:

    return new ModelAndView("welcome");

    How are you running your web application? Are you building a WAR and running it in Tomcat, or something similar?

    --Aaron
    http://www.jmolly.com

  7. #7
    Join Date
    Mar 2012
    Posts
    14

    Default

    Exactly,I am using Tomcat7 as an application server and I deploy the war over it.

  8. #8
    Join Date
    Mar 2012
    Posts
    6

    Default

    You are using Maven to build the WAR?

    You should look in the WAR and make sure that your template file is being packaged into the WAR in the WEB-INF/freemarker directory.

  9. #9
    Join Date
    Mar 2012
    Posts
    6

    Default

    Also, did you properly configure your web.xml?

    <servlet>
    <servlet-name>yourapp</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherSe rvlet</servlet-class>
    <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
    <servlet-name>yourapp</servlet-name>
    <url-pattern>/yourapp/*</url-pattern>
    </servlet-mapping>

    Then, under WEB-INF, you'll need a "yourservlet-servlet.xml" file that has your Spring MVC configuration.

    --Aaron @ jmolly

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •