Velocity学习(三)Velocity遇见SpringMVC
程序员文章站
2022-06-12 09:46:43
...
在SpringMVC环境中要是使用Velocity模板引擎来解析View,首先想到是用JSP时,需要配置视图解析器,Velocity同样也需要配置解析器。先看一段简单的配置
<bean id="velocityConfig" class="org.springframework.web.servlet.view.velocity.VelocityConfigurer"> <property name="resourceLoaderPath" value="/WEB-INF/vm" /> <property name="configLocation" value="classpath:properties/velocity.properties"/> </bean> <bean id="velocityViewResolver" class="org.springframework.web.servlet.view.velocity.VelocityViewResolver"> <property name="prefix" value="/WEB-INF/vm/"/> <property name="suffix" value=".html"/> <!--解决中文乱码--> <property name="contentType" value="text/html;charset=UTF-8" /> </bean>
在模板中输出一句简单的话
<body> Welcome to $name!!! </body>
在SpringMVC中又该如何给这个变量赋值?在SpringMVC中赋值其实很简单
@RequestMapping("velocity") @Controller public class VelocityController { @RequestMapping(value = "entry", method = RequestMethod.GET) public ModelAndView entry() { ModelAndView mv = new ModelAndView(); mv.addObject("name", "Velocity先生"); mv.setViewName("user"); return mv; } }
同样也是会遇到ContextPath路径问题,如果只是针对路径这一个单一问题SpringMVC有一种很简便的解决方案,通过两个简单配置,在Velocity中就可以使用Request对象。
<!-- 开放request属性 --> <property name="exposeRequestAttributes" value="true"/> <property name="requestContextAttribute" value="rc"/>
在HTML中通过下面的方式就可以拿到ContextPath
<img src="$rc.contextPath/resources/images/head.jpg" width="60" heigth="60"/>
使用Velocity-tool2.0同样也可以拿到ContextPath而且不仅如此可以使用Velocity其他的工具对象,但是似乎Spring4对Velocity-tool2.0支持不是太友好,需要费点周折。
首先需要创建一个ViewClass对象,以下代码从网上拷贝过来如下
import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.velocity.context.Context; import org.apache.velocity.tools.Scope; import org.apache.velocity.tools.ToolManager; import org.apache.velocity.tools.view.ViewToolContext; import org.springframework.web.servlet.view.velocity.VelocityToolboxView; public class VelocityToolbox2View extends VelocityToolboxView { @Override protected Context createVelocityContext(Map<String, Object> model, HttpServletRequest request, HttpServletResponse response) throws Exception { // Create a ChainedContext instance. ViewToolContext ctx; ctx = new ViewToolContext(getVelocityEngine(), request, response, getServletContext()); ctx.putAll(model); if (this.getToolboxConfigLocation() != null) { ToolManager tm = new ToolManager(); tm.setVelocityEngine(getVelocityEngine()); tm.configure(getServletContext().getRealPath(getToolboxConfigLocation())); if (tm.getToolboxFactory().hasTools(Scope.REQUEST)) { ctx.addToolbox(tm.getToolboxFactory().createToolbox(Scope.REQUEST)); } if (tm.getToolboxFactory().hasTools(Scope.APPLICATION)) { ctx.addToolbox(tm.getToolboxFactory().createToolbox(Scope.APPLICATION)); } if (tm.getToolboxFactory().hasTools(Scope.SESSION)) { ctx.addToolbox(tm.getToolboxFactory().createToolbox(Scope.SESSION)); } } return ctx; } }
自定义ViewClass对象,下面将配置到SpringMVC解析器中
<!-- 配置 velocity工具类 --> <property name="toolboxConfigLocation" value="/WEB-INF/toolbox.xml"/> <!-- Spring4 支持 velocity-tools2.0 --> <property name="viewClass" value="org.lian.util.VelocityToolbox2View"/>
toolbox.xml配置文件如下
<?xml version="1.0" encoding="UTF-8"?> <tools> <toolbox scope="request"> <tool key="link" class="org.apache.velocity.tools.view.LinkTool" forceRelative="true" includeRequestParams="true"/> </toolbox> </tools>
这时我们也可以通借助Velocity工具对象来拿到ContextPath
<img src="$link.contextPath/resources/images/head.jpg" width="60" heigth="60"/>
最后看一下完整配置
<bean id="velocityConfig" class="org.springframework.web.servlet.view.velocity.VelocityConfigurer"> <property name="resourceLoaderPath" value="/WEB-INF/vm" /> <property name="configLocation" value="classpath:properties/velocity.properties"/> </bean> <bean id="velocityViewResolver" class="org.springframework.web.servlet.view.velocity.VelocityViewResolver"> <property name="prefix" value="/WEB-INF/vm/"/> <property name="suffix" value=".html"/> <!--解决中文乱码--> <property name="contentType" value="text/html;charset=UTF-8" /> <!-- 配置 velocity工具类 --> <property name="toolboxConfigLocation" value="/WEB-INF/toolbox.xml"/> <!-- Spring4 支持 velocity-tools2.0 --> <property name="viewClass" value="org.lian.util.VelocityToolbox2View"/> <!-- 开放request属性 --> <property name="exposeRequestAttributes" value="true"/> <property name="requestContextAttribute" value="rc"/> </bean>
推荐阅读
-
springMVC+velocity实现仿Datatables局部刷新分页方法
-
Velocity用户手册---中文版(学习修改版) velocityWeb化工应用服务器jQuery
-
SpringMVC入门学习三--注解方式
-
一起学习SSM框架之SpringMVC(三)
-
Velocity学习(二)绝对路径 ContextPath
-
Velocity学习(三)Velocity遇见SpringMVC
-
Velocity学习(一)Hello World
-
velocity模板加载的三种形式 velocity
-
springMVC+velocity实现仿Datatables局部刷新分页方法
-
velocity第三个应用例子--遍历集合/数组