2010-02-15 9 views
4

J'essaie d'obtenir des paramètres de requête sur la page Freemarker. Mais je ne peux pas comprendre comment configurer les variables implicites comme RequestParameters ou plus.Demande de paramètres dans Freemarker sur Spring 2.5

Voici un thread http://forum.springsource.org/showthread.php?t=32846 mais je ne sais pas où il a configuré cet objet RequestParameters.

La seule chose que j'ai trouvé dans docs (plus dans le code source), c'est FreemarkerServlet qui peut placer cette variable. Mais je ne l'ai pas dans ma demande. Toutes les configurations sont effectuées via Spring, c'est-à-dire View Resolver.

Quelqu'un peut-il m'aider?

+0

Aucune installation devrait être nécessaire. Que se passe-t-il lorsque vous essayez d'accéder à un paramètre de requête? –

+0

Comme d'habitude: freemarker.core.InvalidReferenceException: Expression Request est indéfini sur ... La même chose est pour RequestParameters – glaz666

Répondre

4

Pour chaîne de requête ?myparam=abc, vous pouvez obtenir à myparam comme ça:

${RequestParameters.myparam} 

Vérifié Spring 3 + Freemarker 2.3.

Ne nécessite aucune configuration supplémentaire pour le gestionnaire de vue.

+0

Je suppose que cela ne fonctionnera que si vous utilisez le servlet FreeMarker. Lors de l'utilisation de Spring (comme glaz666 semble l'être), la réponse @mx est la bonne. – Nico

+0

@Nico a raison. Je l'ai juste essayé moi-même et j'ai très bien travaillé. – Sergio1978

+0

Et si vous utilisez spring 4, vous pouvez le configurer en utilisant FreeMarkerAutoConfiguration – Sergio1978

8

Assurez-vous que exposeRequestAttributes est activé dans votre FreeMarkerViewResolver, par ex.

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

0

boot Spring 1.5 basé à anotation en classe sera quelque chose comme:

package com.openkm.config; 

import java.io.IOException; 

import org.springframework.context.annotation.Bean; 
import org.springframework.context.annotation.Configuration; 
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; 
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; 
import org.springframework.web.servlet.view.InternalResourceViewResolver; 
import org.springframework.web.servlet.view.JstlView; 
import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer; 
import org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver; 

import freemarker.cache.TemplateLoader; 
import freemarker.template.TemplateException; 

@Configuration 
public class WebMvcConfig extends WebMvcConfigurerAdapter { 

    @Override 
    public void addResourceHandlers(ResourceHandlerRegistry registry) { 
     registry.addResourceHandler("/static/**").addResourceLocations("/static/").setCachePeriod(604800); // One week 
    } 

    @Bean(name = "freeMarkerViewResolver") 
    public FreeMarkerViewResolver getFreeMarkerViewResolver() { 
     FreeMarkerViewResolver viewResolver = new FreeMarkerViewResolver(); 
     viewResolver.setExposeSpringMacroHelpers(true); 
     viewResolver.setExposeRequestAttributes(true); 
     viewResolver.setExposeSessionAttributes(true); 
     viewResolver.setPrefix("/WEB-INF/ftl/"); 
     viewResolver.setSuffix(".ftl"); 
     viewResolver.setOrder(0); 
     viewResolver.setContentType("text/html; charset=UTF-8"); 
     viewResolver.setCache(false); 
     viewResolver.setRequestContextAttribute("request"); 
     return viewResolver; 
    } 
}