2010-06-27 4 views
2

J'ai donc une action Index dans ma classe HomeController.java.Premiers pas avec freemarker avec spring mvc

J'ai mes modèles Freemarker dans:

/web-inf/ftl/test.ftl 

Comment puis-je charger le modèle?

J'ai dans mon appname-servlet.xml:

<bean id="viewResolver" 
      class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver"> 
     <property name="suffix"> 
      <value>.ftl</value> 
     </property> 
    </bean> 

    <bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer"> 
     <property name="templateLoaderPath" value="/WEB-INF/freemarker/"/> 
    </bean> 

Que dois mon code d'action pour ressembler action index HomeController?

J'ai /web-inf/freemarker/index.ftl

+0

Cela peut aider: http://stackoverflow.com/questions/4756010/tutorial-for-spring-mvc-with-freemarker –

Répondre

3

Je l'ai utilisé freemarker dans une démo printemps-mvc webapp (printemps 3.0.5). Voir http://projectnotes.svn.sourceforge.net/viewvc/projectnotes/trunk/ Le contrôleur Web ressemble à ceci, de sorte que votre index.ftl (que vous mettriez dans src/main/webapp/WEB-INF) serait rendue lorsqu'une demande est faite index.html

@Controller 
public class IndexController { 

    @RequestMapping("/index.html") 
    public String index(Map<String, Object> model) { 

     // populate the model parameter if you need it in index.ftl 
     return "index"; 

    } 
} 

mon fichier de contexte freemarker ressemble à ce

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

<beans xmlns="http://www.springframework.org/schema/beans" 
     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-2.5.xsd" 
     default-autowire="byName"> 

    <bean id="fmXmlEscape" class="freemarker.template.utility.XmlEscape"/> 

    <bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer"> 
     <property name="templateLoaderPath"> 
      <value>/WEB-INF/freemarker/</value> 
     </property> 

     <property name="freemarkerVariables"> 
      <map> 
       <entry key="xml_escape" value-ref="fmXmlEscape"/> 
      </map> 
     </property> 

     <property name="freemarkerSettings"> 
      <props> 
       <prop key="template_update_delay">3</prop> 
      </props> 
     </property> 
    </bean> 

    <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"/> 
     <property name="exposeSpringMacroHelpers" value="true"/> 
     <property name="exposeRequestAttributes" value="true"/> 
     <property name="exposeSessionAttributes" value="true"/> 
    </bean> 

    <bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver"> 
     <property name="mediaTypes"> 
      <map> 
       <entry key="html" value="text/html"/> 
       <entry key="ftl" value="text/html"/> 
       <entry key="xml" value="application/xml"/> 
       <entry key="json" value="application/json"/> 
      </map> 
     </property> 
     <property name="favorPathExtension" value="true"/> 
     <property name="defaultViews"> 
      <list> 
       <bean class="org.springframework.web.servlet.view.json.MappingJacksonJsonView"> 
        <!-- prevents code injection --> 
        <property name="prefixJson" value="true"/> 
       </bean> 
      </list> 
     </property> 
     <property name="viewResolvers"> 
      <list> 
       <bean 
        class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver"> 
        <property name="cache" value="true" /> 
        <property name="order" value="1"/> 
        <property name="prefix" value="/" /> 
        <property name="suffix" value=".ftl" /> 
        <property name="contentType" value="text/html;charset=UTF-8"/> 
        <property name="exposeSpringMacroHelpers" value="true" /> 
        <property name="requestContextAttribute" value="rc" /> 
        <property name="exposeSessionAttributes" value="true" /> 
       </bean> 
      </list> 
     </property> 
    </bean>  
</beans> 
0

d'un exemple opérationnel disponible sur mon blog, votre contrôleur devrait ressembler à ceci:

@Controller 
public class MyController { 

    @RequestMapping(value = "/index") 
    public String home(Model model) { 

      // Populate the model as necessary 
      model.addAttribute("MsTime", System.currentTimeMillis()); 

      return "Home"; 

    } 

}