`

springmvc+velocity 在vm模板上添加通用工具类对象变量

阅读更多

在平时工作的项目中经常会在vm模板中添加自定义的工具类,由于上班时用的是sofa框架,里面的配置跟spring还是有区别的,以前自己也没有做过,今天就尝试了一下,主要配置如下:

<!-- 让Spring启用对annotation的支持 -->
	<context:annotation-config></context:annotation-config>

<!-- 自动扫描org.yonge路径下的所有文件,并根据注解完成注入的工作 -->
	<context:component-scan base-package="com.yonge"></context:component-scan>

	<!-- 配置velocity引擎 -->
	<bean id="velocityConfigurer"
		class="org.springframework.web.servlet.view.velocity.VelocityConfigurer">
		<property name="resourceLoaderPath" value="/" /><!-- 模板存放的路径 -->
		<property name="velocityProperties">
			<props>
				<prop key="input.encoding">gbk</prop>
				<prop key="output.encoding">gbk</prop>
			</props>
		</property>
	</bean>

	<!-- 配置视图的显示 -->
	<bean id="ViewResolver"
		class="org.springframework.web.servlet.view.velocity.VelocityViewResolver">
		<property name="prefix" value="/" /><!-- 视图文件的前缀,即存放的路径 -->
		<property name="suffix" value=".vm" /><!-- 视图文件的后缀名 -->
		<property name="exposeRequestAttributes" value="true" /><!-- 暴露request属性 -->
		<property name="toolboxConfigLocation" value="/WEB-INF/velocity/tools.xml" /><!-- 配置工具类 -->
		<!-- VelocityToolboxView 类只支持1.X的velocitytools -->
		<!--<property name="viewClass"
			value="org.springframework.web.servlet.view.velocity.VelocityToolboxView" /> -->
		<property name="viewClass"
			value="com.yonge.web.velocity.VelocityToolbox20View" />
		<!-- <property name="viewClass"
			value="org.springframework.web.servlet.view.velocity.VelocityView" /> -->
	</bean>

	<!-- 将自定义工具类 注入到VelocityContext中-->
	<!-- <bean name="velocityView"
		class="org.springframework.web.servlet.view.velocity.VelocityView">
		<property name="toolAttributes">
			<map>
				<entry key="dateUtil" value="com.yonge.web.util.DateUtil" />
			</map>
		</property>
		<property name="url" value="/" />
	</bean> -->

 

上面的配置文件中,VelocityToolbox20View是重写的一个类,是在网上copy的,如下:

public class VelocityToolbox20View 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;
	}
}

 velocityTool的配置文件:

<?xml version="1.0" encoding="UTF-8"?>

<tools>
    <data type="boolean" key="xhtml" value="true"/>
    <data type="boolean" key="isSimple" value="true"/>
    <data type="number" key="version" value="2.0"/>
    <data key="foo">this is foo</data>
    <data key="bar">this is bar.</data>
    
    <toolbox scope="request">
        <!-- <tool key="toytool" class="ToyTool" restrictTo="index*"/> -->
    </toolbox>
    
    <toolbox scope="session">
        <!-- <tool key="map" class="java.util.HashMap"/> -->
    </toolbox>
    
    <toolbox scope="application">
        <!-- <tool key="map" class="java.util.HashMap"/> -->
        <tool key="dateUtil" class="com.yonge.web.util.DateUtil"/>
    </toolbox>
</tools>

 用velocityTool很好的解决了添加自定义工具类的问题,但是我最开始的时候是想通过另一种VelocityView解决这个问题,向velocityView中注入toolAttributes属性(如上面的配置文件),该属性的类型是一个Map<String, Class>,key是vm模板上使用的变量名,value是对应自定义的工具类,它也会将toolAttributes属性添加到velocityContext中,但是我却遇到了velocityView不能注入viewClass的问题,因为velocityView是一个实例对象,而viewClass是一个class类型的,导致类型转换错误,希望知道的兄弟们回复一下,thx!!!

1
2
分享到:
评论
8 楼 sl1992 2016-06-29  
sl1992 写道
spring配置里/WEB-INF/velocity/tools.xml  这个文件写法
<tools>
<toolbox scope="application">
<tool class="com.cyyun.authim.shiro.velocity.AuthTool" />
<tool class="com.cyyun.base.velocity.TagTool" />
<tool class="com.cyyun.base.velocity.ConfigTool" />
<tool class="com.cyyun.base.velocity.ConstTool" />
</toolbox>
</tools>


自定义工具编写
/**
* <h3>Velocity 常量工具类</h3>
*
*/
@DefaultKey("const")
@ValidScope(Scope.APPLICATION)
public class ConstTool implements ConstUtil {
}
7 楼 sl1992 2016-06-29  
spring配置里/WEB-INF/velocity/tools.xml  这个文件写法
<tools>
<toolbox scope="application">
<tool class="com.cyyun.authim.shiro.velocity.AuthTool" />
<tool class="com.cyyun.base.velocity.TagTool" />
<tool class="com.cyyun.base.velocity.ConfigTool" />
<tool class="com.cyyun.base.velocity.ConstTool" />
</toolbox>
</tools>
6 楼 hackpro 2013-12-26  
哥们你们解决了吗?这个问题折腾我很久了
5 楼 hackpro 2013-10-09  
我也想问啊,
如果com.yonge.web.util.DateUtil 怎么注入一下spring管理的bean
4 楼 hackpro 2013-08-21  
我也想问,VelocityContext 自定义后, 怎么注入了?
3 楼 cjjwzs 2012-05-20  
for example toolbox.xml
<tool>
  <key>math</key>
  <scope>application</scope>
  <class>org.apache.velocity.tools.generic.MathTool</class>
</tool>
then you config toolAttributes ,,math

2 楼 yonge812 2012-05-20  
JetMah 写道
可以自定义VelocityContext

我的第二种方法就是向VelocityContext中插入自定义的对象,但是不知道怎么注入,你知道吗?
1 楼 JetMah 2012-05-20  
可以自定义VelocityContext

相关推荐

    maven+springMVC+mybatis+velocity+mysql+junit项目框架搭建

    本项目框架“maven+springMVC+mybatis+velocity+mysql+junit”提供了一种高效、灵活且可维护的解决方案。以下将详细讲解这些组件及其作用。 1. Maven: Maven是一个项目管理工具,用于构建、依赖管理和项目信息...

    Spring+SpringMVC+Mybatis+Velocity+Maven demo

    Spring、SpringMVC、Mybatis、Velocity和Maven是Java Web开发中常用的一组技术栈,它们各自在软件开发的不同层面发挥着重要作用。这个压缩包文件的标题和描述表明,它提供了一个集成这些技术的演示项目,下面我们将...

    springMVC+Velocity+iBATIS整合

    在这个"SpringMVC+Velocity+iBATIS的整合小demo"中,可能包含了这些配置文件、Controller类、Service接口及其实现、Mapper接口及其XML配置、Velocity模板文件等。通过这些文件,我们可以看到一个完整的Java Web应用...

    springmvc+velocity

    J2EE开发中velocity获取项目地址,使用框架springmvc+velocity视图器,velocity配置toolboxConfigLocation使.vm文件获取项目资源地址和设置静态资源地址。 此处demo实现效果为:test.vm模板通过调用${ctx.rootPath}...

    springmvc+mybatis+velocity整合实例

    总的来说,"springmvc+mybatis+velocity整合实例"提供了一个轻量级且功能齐全的Web开发基础,适合快速搭建项目。通过这个整合,开发者可以充分利用Spring MVC的控制层优势、MyBatis的数据访问便捷性,以及Velocity的...

    Spring+Hibernate+SpringMVC+Velocity+Maven整合

    Spring+Hibernate+SpringMVC+Velocity+Maven整合

    SpringMVC+ibatis+velocity整合例子

    4. 配置Velocity:在Spring配置文件中添加VelocityViewResolver,指定模板目录和Velocity工具类。 5. 编写Controller:使用SpringMVC的@Controller注解创建控制器类,定义处理HTTP请求的方法,注入Service层的Bean。...

    maven+springmvc+spring+ibatis+velocity+mysql

    在构建企业级Web应用时,"maven+springmvc+spring+ibatis+velocity+mysql"这个组合提供了高效且灵活的开发框架。让我们逐一解析这些技术及其在项目中的作用。 **Maven** 是一个项目管理和综合工具,它帮助开发者...

    一套基于SpringMVC+velocity框架的web应用 ,基于注解

    在SpringMVC+Velocity的应用中,Sitemesh可以通过简单的配置与这两个框架集成,实现全站页面的统一装饰。 综上所述,这套基于SpringMVC+Velocity的web应用利用了SpringMVC的注解驱动特性,简化了控制器和依赖管理;...

    SpringMVC+Velocity+Maven整合例子

    5. **编写Velocity模板**:在src/main/resources目录下创建Velocity模板文件,如test.vm,用Velocity语法编写动态内容。 6. **运行项目**:在IDEA等集成开发环境中,配置Maven的生命周期,运行项目。通过浏览器访问...

    Java基于Spring+SpringMVC+MyBatis实现的学生信息管理系统源码.zip

    Java基于Spring+SpringMVC+MyBatis实现的学生信息管理系统源码,SSM+Vue的学生管理系统。 Java基于Spring+SpringMVC+MyBatis实现的学生信息管理系统源码,SSM+Vue的学生管理系统。 Java基于Spring+SpringMVC+...

    Spring+SpringMVC+MyBatis+Shiro+MySQL+Redis+Maven实现的通用权限管理系统

    Spring+SpringMVC+MyBatis+Shiro+MySQL+Redis+Maven+EasyUI+Bootstrap实现的通用权限管理系统。 Spring+SpringMVC+MyBatis+Shiro+MySQL+Redis+Maven+EasyUI+Bootstrap实现的通用权限管理系统 Spring+SpringMVC+...

    完善的Spring+SpringMVC+Mybatis+easyUI后台管理系统(RESTful API+redis).zip

    完善的Spring+SpringMVC+Mybatis+easyUI后台管理系统(RESTful API+redis).zip 完善的Spring+SpringMVC+Mybatis+easyUI后台管理系统(RESTful API+redis).zip 完善的Spring+SpringMVC+Mybatis+easyUI后台管理系统...

    springmvc+mybatis+easyui+velocity开源后台J2EE框架

    J2ee开源模板后台是基于 springmvc+mybatis+easyui+velocity 技术实现的一套模板后台,把一些通用的功能模板化,可以在线打包生成整站源码包括 jsp页面,为开发人员节省时间 ,生成的功能有增删改查,查询包括按列...

    springmvc+velocity+hession+ibatis

    标题 "springmvc+velocity+hession+ibatis" 涉及到的是一个使用Spring MVC、Velocity、Hessian和iBatis构建的Web应用程序。这些技术是Java开发中的关键组件,让我们逐一深入理解它们: 1. **Spring MVC**:Spring ...

    maven+springMVC+mybatis+velocity+mysql+junit 代码生成器

    【标题】"maven+springMVC+mybatis+velocity+mysql+junit 代码生成器" 描述了一个集成开发环境,这个环境结合了多种技术,旨在帮助开发者快速、高效地生成应用程序的基础代码。以下是这些技术及其相关知识点的详细...

    SpringMVC+hibernate+velocity+Annotation

    综合这些技术,"SpringMVC+hibernate+velocity+Annotation"的例子提供了一个完整的Web应用开发基础架构。SpringMVC处理HTTP请求,调用由Hibernate管理的业务逻辑,最后通过Velocity模板生成动态网页。这种架构充分...

    spring+springMVC+mybatis+quartz动态定时任务创建

    在IT行业中,构建高效、可扩展的Web应用是至关重要的,而"spring+springMVC+mybatis+quartz动态定时任务创建"就是一个常见的技术栈,用于实现这样的目标。这个组合充分利用了各组件的优势,提供了强大的后端服务支持...

    Springboot+Mybatis-plus+ SpringMvc+Shiro+Redis企业级报表后台管理系统.rar

    在上家公司自己集成的一套系统,用了两个多月的时间完成的:Springboot+Mybatis-plus+ SpringMvc+Shiro+Redis企业级开发系统 Springboot作为容器,使用mybatis作为持久层框架 使用官方推荐的thymeleaf做为模板引擎,...

    基于SpringMVC+Spring+MyBatis+Maven项目案例.zip

    基于SpringMVC+Spring+MyBatis+Maven项目案例 基于SpringMVC+Spring+MyBatis+Maven项目案例 基于SpringMVC+Spring+MyBatis+Maven项目案例 基于SpringMVC+Spring+MyBatis+Maven项目案例 基于SpringMVC+Spring+MyBatis...

Global site tag (gtag.js) - Google Analytics