简体   繁体   English

Spring MVC和Freemarker /速度

[英]Spring MVC & Freemarker/Velocity

I've got a problem with Freemarker's and Velocity's view resolver (not running at same moment) - both of them don't see Spring's session beans. 我在Freemarker和Velocity的视图解析器上有问题(不能同时运行)-两者都看不到Spring的会话bean。 Spring's InternalResourceViewResolver works good. Spring的InternalResourceViewResolver运作良好。

Some code: 一些代码:

<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>

In jsp: 在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: 的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.You should annotate controller to point out which model attribute should be exposed in a session 2.In freemarker, access to session attrs is done by a freemarker session wrapper. 1.您应该对控制器进行注释,以指出应在会话中公开哪个模型属性。2.在freemarker中,对会话attrs的访问由freemarker会话包装器完成。

Short example below, based on Your code: 以下简短示例基于您的代码:

@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();
    }    

}

On the ftl side:${Session.userRegisterCredentials.someStringField} 在ftl方面:$ {Session.userRegisterCredentials.someStringField}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM