Первые шаги с freemarker с пружинным mvc - PullRequest
2 голосов
/ 28 июня 2010

Итак, у меня есть действие Index в моем классе HomeController.java.

У меня есть шаблоны бесплатного маркера в:

/web-inf/ftl/test.ftl

Как я могу загрузить шаблон?

У меня есть это в моем 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>

Как должен выглядеть мой код действия для действия индекса HomeController?

У меня есть / web-inf/freemarker/index.ftl

Ответы [ 2 ]

3 голосов
/ 06 августа 2011

Я использовал freemarker в демонстрационном веб-приложении spring-mvc (spring 3.0.5). Смотри http://projectnotes.svn.sourceforge.net/viewvc/projectnotes/trunk/ Веб-контроллер выглядит следующим образом, поэтому ваш index.ftl (который вы бы поместили в src / main / webapp / WEB-INF) будет отображаться при запросе к 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";

    }
}

Мой контекстный файл freemarker выглядит следующим образом

<?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 голосов
/ 26 октября 2012

Из рабочего примера, доступного в моем блоге , ваш контроллер должен выглядеть примерно так:

@Controller
public class MyController {

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

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

            return "Home";

    }

}
...