在项目中有一个需求,每个物品有一个guid,存在数据库中,而在页面上需要显示一个对应的业务数据值,暂且叫做serverId,serverId是通过guid移位计算得来。serverId只需要显示,后台并不需要使用。
因为serverId在后台用不到,所以就没有使用VO字段来存储,项目使用了Freemarker作为view层的模板引擎。了解到Freemarker的一个特点是具有很多内置的功能强大的方法,例如substring、upper_case等。最重要的是Freemarker支持自定义方法。所以就考虑到了通过自定义Freemarker方法来解决。具体步骤如下:
Freemarker实现自定义方法很简单,只需要实现freemarker.template.TemplateMethodModel接口就行了。具体代码如下所示:
import java.util.List;
import freemarker.template.TemplateMethodModel;
import freemarker.template.TemplateModelException;
/**
* ClassName:GuidToServerIdUtil <br/>
* Function: Freemarker自定义方法,通过guid位移48位计算serverId. <br/>
* Date: 2012-12-26 下午09:09:35 <br/>
* @author chenzhou
* @version
* @since JDK 1.6
*/
public class GuidToServerIdUtil implements TemplateMethodModel {
@Override
public Object exec(List args) throws TemplateModelException{
//参数列表的第一位为guid
long guid = Long.parseLong(args.get(0).toString());
//通过guid位移48位计算serverId
int serverId = (int) (guid >>> 48);
return serverId;
}
}
如上面代码所示 ,GuidToServerIdUtil类定义了一个exec方法,此方法内的逻辑就是自定义Freemarker方法的执行逻辑。代码很简单,把guid当做第1个参数传递进来,然后执行移位计算后返回计算后的结果。
定义了GuidToServerIdUtil类之后我们如果需要在ftl页面中使用还需要在项目的xxx-servlet.xml中进行配置,具体配置如下:
<!--配置视图解析器,使用FreeMarker视图 -->
<bean id="viewResolver"
class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
<property name="viewClass"
value="org.springframework.web.servlet.view.freemarker.FreeMarkerView"></property>
<property name="exposeSessionAttributes" value="true"></property>
<property name="exposeRequestAttributes" value="true"></property>
<property name="suffix" value=".ftl"></property>
<property name="contentType" value="text/html;charset=utf-8"></property>
<property name="attributesMap">
<map>
<!-- 定义Freemarker方法的名称 -->
<entry key="guid2sid">
<!-- 关联到我们之前定义的工具类 -->
<bean class="com.chenzhou.examples.erm.util.GuidToServerIdUtil" />
</entry>
</map>
</property>
</bean>
上面配置文件中,我们定义了方法的名称为guid2sid,然后关联到了GuidToServerIdUtil类。配置完后,我们就可以在ftl页面中使用了:
页面显示结果如下:
说明guid2sid方法已经生效了。
除了在配置文件中定义后使用之外,我们也可以直接把方法对象放入到Freemarker的数据模型中,然后在ftl文件中使用。具体示例如下(注意我把方法命名为guid2serverId):
//在Controller方法中把方法对象存入数据模型中
model.put("guid2serverId", new GuidToServerIdUtil());
然后在ftl使用方法还是一样:
结果如下:
分享到:
相关推荐
NULL 博文链接:https://zhenghuazhi.iteye.com/blog/1923544
里面 集合了 一个 简单的 Freemarker demo 代码 和一个 freemarker 自定义标签代码
spring mvc freemarker 自定义标签demo spring mvc 通过自定义的标签在jsp页面调用,初学,记录下做个备忘
一个用FTL定义的非常通用数据分页指令,有源码,有使用示例。使用效果图可以参看本人博客中的相关文章:http://blog.csdn.net/qjyong/archive/2009/10/18/4693142.aspx
NULL 博文链接:https://asialee.iteye.com/blog/2062313
在jfinal的基础上,实现freemarker自定义标签的自动扫描和注册,本资源包不含jfinal框架,需在已有框架的基础上添加包中的代码,如需jfinal框架请自行到官网下载
NULL 博文链接:https://renxin-327666062-qq-com.iteye.com/blog/1532731
该例采用单元测试,实现fremarker通用下拉框,满足所有web下拉框需求
spring boot + mybaits +freemarker +maven 架构来袭 注解版 spring boot + mybaits +freemarker +maven 架构来袭 注解版
使用Spring boot + FreeMarker 实现代码生成功能,完整案例可以查看 eladmin 项目,教程地址: https://www.ydyno.com/archives/1177.html
springMVC3.2+Hibernate4+freemarker 代码框架采用springMVC3.2.4+hibernate4.2.8+freemarker2.3.16 功能方面只是一个简单的注册登录,前台使用freemarker渲染,使用了freemarker自定义标签。
springsecurity(用spring ibatis freemaker)实现的用户自定义的权限管理页面, 里头包括数据库脚本 和原数据 和原代码 主要参考http://blog.csdn.net/k10509806/article/details/6369131 这个人的文章做的
支持生成DAO,PO,和sql语句的xml文件。
1. 使用Apache POI 3.9 自定义样式导出Excel文件; 2. 使用freemarker动态生成word .doc文档(带图片Word以及复杂格式word) 详细说明见个人博客及 github: https://github.com/DuebassLei/excel-poi
FreeMarker模板引擎不错,使用非常简单,其实可以做很多事情,比如代码自动生成,按格式生成work文件等,这里简单的实现了按照实体生成建表语句、action、biz、dao和对应的xml文件等
Velocity 和 FreeMarker区别 对于大部分的应用来说,使用 FreeMarker 比 Velocity 更简单,因为 Velocity 还必须编写一些自定义的
Freemarker页面语法 A 概念 最常用的 3 个概念 sequence 序列,对应java 里的list 、数组等非键值对的集合 hash 键值对的集合 namespace 对一个ftl 文件的引用, 利用这个名字可以访问到该ftl 文件的资源 ...
freemarker实现自动补...通过ftl模版文件(ftl文件为freemarker模版文件)的自定义标签实现自动补齐字符串。代码稍作修改便可左补齐右补齐左右补齐,可自定义设置补齐的字符串。测试通过java文件调用ftl文件显示结果。
本篇文章主要介绍了Spring Boot使用模板freemarker的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
Freemarker动态生成word,包含文字替换,freemarker嵌入自定义java函数,动态生成表格列,插入图片的示例,同时使用spire将wordxml格式转换成word文档(doc格式),还包含文件下载示例