最近在使用spring,利用velocity作为表现层。但是遇到个在vm模版中如何获取request,session属性的问题。
我配置如下。
springContext.xml
<bean id="velocityConfigurer" class="org.springframework.web.servlet.view.velocity.VelocityConfigurer">
<property name="resourceLoaderPath">
<value>WEB-INF/velocityViews/</value>
</property>
<property name="velocityProperties">
<props>
<prop key="input.encoding">UTF-8</prop>
<prop key="output.encoding">UTF-8</prop>
</props>
</property>
</bean> <bean id="velocityViewResolver" class="org.springframework.web.servlet.view.velocity.VelocityViewResolver">
<property name="suffix" value=".vm"/>
<property name="contentType"><value>text/html;charset=UTF-8</value></property>
<property name="exposeRequestAttributes" value="true"></property>
</bean>
控制器 @Override
protected ModelAndView handleRequestInternal(HttpServletRequest request,
HttpServletResponse response) throws Exception { System.out.println(request.getParameter("test")); return new ModelAndView("hello");
}
hello.vm模版代码<html >
<head>
<title>VM首页</title>
</head>
<body>
#set($word="中国")
hello,$word
$request.parameter.test
</body>
</html>
但我使用hello.html?test=111访问时,在控制器里面确实获得了request的test内容,但是在vm模版上却无法获取,但是我已经设置exposeRequestAttributes为true了啊。
请各位大侠帮忙
我配置如下。
springContext.xml
<bean id="velocityConfigurer" class="org.springframework.web.servlet.view.velocity.VelocityConfigurer">
<property name="resourceLoaderPath">
<value>WEB-INF/velocityViews/</value>
</property>
<property name="velocityProperties">
<props>
<prop key="input.encoding">UTF-8</prop>
<prop key="output.encoding">UTF-8</prop>
</props>
</property>
</bean> <bean id="velocityViewResolver" class="org.springframework.web.servlet.view.velocity.VelocityViewResolver">
<property name="suffix" value=".vm"/>
<property name="contentType"><value>text/html;charset=UTF-8</value></property>
<property name="exposeRequestAttributes" value="true"></property>
</bean>
控制器 @Override
protected ModelAndView handleRequestInternal(HttpServletRequest request,
HttpServletResponse response) throws Exception { System.out.println(request.getParameter("test")); return new ModelAndView("hello");
}
hello.vm模版代码<html >
<head>
<title>VM首页</title>
</head>
<body>
#set($word="中国")
hello,$word
$request.parameter.test
</body>
</html>
但我使用hello.html?test=111访问时,在控制器里面确实获得了request的test内容,但是在vm模版上却无法获取,但是我已经设置exposeRequestAttributes为true了啊。
请各位大侠帮忙
<head>
<title>VM首页</title>
</head>
<body>
#set($word="中国")
hello,$word #set($test1 = $request.getParameter('test'))
$test1
</body>
</html>velocity取内置对象要先set的,这样就可以取到了,试试吧
<!-- Velocity 视图解析器 -->
<entry key="vm">
<bean class="org.springframework.web.servlet.view.velocity.VelocityViewResolver">
<property name="viewClass" value="cn.zwork.eap.base.view.ExtVelocityView" />
<property name="contentType" value="text/html;charset=UTF-8" />
<property name="requestContextAttribute" value="rc" />
</bean>
</entry>"requestContextAttribute" 把Spring的RequestContext对象暴露为变量rc。利用${rc.contextPath}来获取应用程序的contextPath(也 就是/MyUsers);利用${rc.getMessage("user.name")}读取/WEB- INF/classes/messages.properties本地化信息。此对象对于那些不访问serlvet请求的View技术(也就是 Velocity和FreeMarker模板)来说是必不可少的。