2013-07-22 65 views
2

我遇到了Freemarker和Velocity的視圖解析器(不同時運行)的問題 - 它們都沒有看到Spring的會話bean。 Spring的InternalResourceViewResolver工作良好。Spring MVC&Freemarker/Velocity

某些代碼:

<context:component-scan base-package="com.revicostudio.web" /> 
<mvc:annotation-driven /> 

<bean id="userSession" class="com.revicostudio.web.session.UserSession" scope="session" /> 

<bean id="velocityConfig" class="org.springframework.web.servlet.view.velocity.VelocityConfigurer"> 
    <property name="resourceLoaderPath" value="/WEB-INF/jsp/" /> 
</bean> 

<bean id="viewResolver" class="org.springframework.web.servlet.view.velocity.VelocityLayoutViewResolver"> 
    <property name="cache" value="true" /> 
    <property name="prefix" value="" /> 
    <property name="layoutUrl" value="layout.jsp"/> 
    <property name="suffix" value=".jsp" /> 
    <property name="exposeSessionAttributes" value="true" /> 
    <property name="exposeRequestAttributes" value="true" /> 
    <property name="requestContextAttribute" value="rc" /> 
</bean> 

在JSP:

${userSession}<br /> <!-- Null if Freemarker's view resolver active, session object if Spring's resolver active --> 
${error}<br /> <!-- Normal request attribute, put to map, that works good in both resolvers --> 

的IndexController:

@Controller 
@RequestMapping("/index") 
public class IndexController { 
    @RequestMapping(method=RequestMethod.GET) 
    public String getIndex(Model model) { 
     return "index"; 
    } 

    @ModelAttribute("userRegisterCredentials") 
    public UserRegisterCredentials getUserRegisterCredentials() { 
     return new UserRegisterCredentials(); 
    } 

    @ModelAttribute("userLoginCredentials") 
    public UserLoginCredentials getUserLoginCredentials() { 
     return new UserLoginCredentials(); 
    } 
} 

回答

1

1.You應註釋控制器指出哪個模型屬性應該以暴露會話 2.在freemarker中,會話attrs的訪問由freemarker會話完成包裝。

下面

短例如,根據您的代碼:

@Controller 
@SessionAttributes("userRegisterCredentials") 
@RequestMapping("/index") 
public class IndexController { 
    @RequestMapping(method=RequestMethod.GET) 
    public String getIndex(Model model) { 
     return "index"; 
    } 

    @ModelAttribute("userRegisterCredentials") 
    public UserRegisterCredentials getUserRegisterCredentials() { 
     return new UserRegisterCredentials(); 
    }  

} 

在FTL方面:$ {} Session.userRegisterCredentials.someStringField