在项目中有一个需求,每个物品有一个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使用方法还是一样:
结果如下:
分享到:
相关推荐
这通常是通过`Configuration`对象的`setSharedVariable`方法完成的,将你的自定义指令类实例绑定到一个特定的名字,这个名字就是你在模板中使用的标签名。 3. 使用自定义标签:在模板文件中,你可以像使用内置标签...
在这个"Freemarker自定义标签简单案例"中,我们将深入探讨如何利用Freemarker进行模板设计,并结合自定义标签来增强模板的功能。 首先,让我们理解Freemarker的基础知识。Freemarker是一个与语言无关的模板引擎,它...
一个用FTL定义的非常通用数据分页指令,有源码,有使用示例。使用效果图可以参看本人博客中的相关文章:http://blog.csdn.net/qjyong/archive/2009/10/18/4693142.aspx
下面将详细介绍Spring MVC与Freemarker自定义标签的使用。 首先,我们需要了解Freemarker的基础。Freemarker是一个基于模板的语言,它的主要任务是根据数据模型生成输出。在Spring MVC中,Freemarker模板通常用于...
在这个主题“freemarker自定义分页标签宏”中,我们将深入探讨如何在FreeMarker中创建自定义的分页标签宏,以便更有效地管理和展示大量数据。 首先,分页是一种常见的网页设计技术,用于将大量数据分割成小块,使...
### 二、Freemarker自定义方法实现原理 Freemarker 是一个基于 Java 的模板引擎,用于生成文本输出。在 Freemaker 中,可以通过实现 `TemplateMethodModel` 接口来创建自定义方法。这些自定义方法可以在模板中通过 ...
Freemarker支持条件判断、循环结构、内置函数,以及自定义标签,增强了模板的灵活性。与JSP相比,Freemarker通常被认为更简洁、易读且更易于维护。 将这三个框架结合使用,可以构建出高效、灵活的Java Web应用。...
本资源包的核心内容是教你如何在JFinal项目中实现FreeMarker自定义标签的自动扫描和注册,从而提升模板引擎的功能和灵活性。 首先,我们需要理解自定义标签的概念。在FreeMarker中,自定义标签允许开发者扩展其内置...
要实现这个功能,开发者通常需要自定义一个FreeMarker指令或使用已有的扩展库。例如,`FormatDirective.java`可能就是一个实现了自定义格式化的指令。在自定义指令中,你可以根据需要处理模板输出的文本,添加适当的...
Freemarker是一个强大的模板引擎,常用于Web应用中的视图层渲染,比如Spring MVC框架中的JSP替代技术。本示例关注的是如何在Freemarker(FTL)中创建一个通用的`select`下拉框,以满足各种Web界面中的下拉选择需求。...
在本项目中,我们采用了Spring Boot、MyBatis、FreeMarker和Maven这四个核心组件构建了一套完整的Web应用程序架构。下面将详细讲解这四个技术及其整合应用。 **Spring Boot** Spring Boot是Spring框架的一个扩展,...
使用Spring boot + FreeMarker 实现代码生成功能,完整案例可以查看 eladmin 项目,教程地址: https://www.ydyno.com/archives/1177.html
通过上述内容,我们了解了Freemarker自定义标签的基本概念、创建与使用方法,以及如何在实际项目中发挥作用。自定义标签极大地增强了Freemarker的灵活性,使得模板语言可以更好地适应各种应用场景。在阅读...
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 这个人的文章做的
1. 使用Apache POI 3.9 自定义样式导出Excel文件; 2. 使用freemarker动态生成word .doc文档(带图片Word以及复杂格式word) 详细说明见个人博客及 github: https://github.com/DuebassLei/excel-poi
在这个示例中,我们将介绍如何将 Shiro 集成到 Spring Boot 项目中,并实现自定义密码验证和 Freemarker 标签根据权限渲染不同页面。 首先,需要在 pom.xml 文件中添加 Shiro 的依赖项: ```xml <groupId>org....
4. **函数和方法**:Freemarker支持自定义函数和方法,可以使用内置的函数库,如字符串操作、数学计算等,也可以扩展自定义函数来满足特定需求。 5. **模板继承和导入**:通过`<#import>`和`<#extends>`,模板可以...
例如,创建一个名为"userLogin"的Action,指定其执行的类和方法,然后将成功的返回结果映射到一个Freemarker模板。 6. **Freemarker模板的编写**: - 在Freemarker模板文件中,可以使用Struts2标签库,如`s:...