文档章节

Freemarker 自定义标签 实现TemplateDirectiveModel

zbbmaster
 zbbmaster
发布于 2014/11/20 11:11
字数 301
阅读 1923
收藏 2

1  自定义标签需要实现TemplateDirectiveModel这个接口中的execute方法  实例代码如下

public class UserListDirective implements TemplateDirectiveModel{
	
	@Autowired
	private UserDAO  userDao;
	@Override
	public void execute(Environment env, Map params, TemplateModel[] loopVars,
			TemplateDirectiveBody body) 
                      throws TemplateException, IOException {
		String name = params.get("name").toString();
		List<User> userlist = userDao.findByProperty("name", name);

		env.setVariable("userList", getBeansWrapper().wrap(userlist));
		body.render(env.getOut());
	}
	
	public static BeansWrapper getBeansWrapper(){
		BeansWrapper beansWrapper = 
                         new BeansWrapperBuilder(Configuration.VERSION_2_3_21).build();
		return beansWrapper;
	}
}



2 配置 UserListDirective 到spring  bean xml中

<bean id="userListDirective" class="com.action.directive.UserListDirective"></bean>
3 将spring bean 设置到freemarkerConfig全局变量中去。
<bean id="freemarkerConfig2"
        class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
        <property name="templateLoaderPath" value="/" />
        <property name="freemarkerVariables">
            <map >
                <entry key="userListDirective" value="userListTag" />
            </map>
        </property>
        <property name="freemarkerSettings">
            <props>
                <prop key="template_update_delay">0</prop>
                <prop key="defaultEncoding">UTF-8</prop>
                <prop key="url_escaping_charset">UTF-8</prop>
                <prop key="locale">zh_CN</prop>
                <prop key="boolean_format">true,false</prop>
                <prop key="datetime_format">yyyy-MM-dd HH:mm:ss</prop>
                <prop key="date_format">yyyy-MM-dd</prop>
                <prop key="time_format">HH:mm:ss</prop>
                <prop key="number_format">0.######</prop>
                <prop key="whitespace_stripping">true</prop>
            </props>
        </property>
    </bean>
4 ftl文件中的访问方式


<@userListTag name="zhangsan">
    <#if userList?? && userList?size gt 0>
        <#list userList as user>
            <a href="">${user.name}</a>
        </#list>
    </#if> 
</@userListTag>

5 freemarker 遍历 map

第一种方式(2.3.21版本之前好像可以用)

<#list testMap?keys as testKey>  
    < option value="${testKey}" >  
        ${testMap.get(testKey)}  
    </option>  
</#list>
第二种方式

<#list testMap.keySet() as testKey>  
    < option value="${testKey}" >  
        ${testMap.get(testKey)}  
    </option>  
</#list>





© 著作权归作者所有

共有 人打赏支持
zbbmaster
粉丝 55
博文 67
码字总数 38770
作品 0
西安
高级程序员
私信 提问
Beetl可以自定义宏吗?类似freemarker的

@闲.大赋 你好,想跟你请教个问题:Beetl可以像freemarker一样使用TemplateDirectiveModel接口就能实现自定义标签的宏~~~还可以带参,方便的很~~beetl的话应该要怎么样使用? public class C...

bing_chuan
2014/06/22
854
1
分析下jfinal cms的标签如何写?

比如cms建站使用的栏目,新闻,文章等模板。 如果使用freemarker作为模板引擎,请问是否会使用spring plugin, 因为freemarker作为模板引擎可以定义丰富的标签,而且内置对spring的支持, 这样...

控制
2012/12/19
1K
1
freemarker 如何利用宏来编写Datagrid自定义标签?访问上下文的数据

freemarker 如何利用宏来编写这样的自定义标签?我想写一个datagrid的类似的宏,想这么写: 在macro中,我想这么写: 也就是说,datagrid标签里面,访问了子标签的内容,不知道freemarker 可...

lifer
2014/12/08
103
0
分享Struts2与Freemarker的配置方法

刚才在OECP社区看到一篇文章,《Struts2与Freemarker的配置方法》觉得很好,所以转发给大家分享一下。 Freemarker是模板引擎,也可以说是一种表现层的框架,它有自己的模板指令,开发者如果不...

oecp
2011/05/16
0
0
Struts2与Freemarker的配置方法(附源码和插件)

Freemarker是模板引擎,也可以说是一种表现层的框架,它有自己的模板指令,开发者如果不熟悉这些语法,很难进行表现层的开发。Struts2框架技术对Freemarker做了很好的支持,开发人员只要熟悉...

oecp
2011/04/28
0
0

没有更多内容

加载失败,请刷新页面

加载更多

EOS docker开发环境

使用eos docker镜像是部署本地EOS开发环境的最轻松愉快的方法。使用官方提供的eos docker镜像,你可以快速建立一个eos开发环境,可以迅速启动开发节点和钱包服务器、创建账户、编写智能合约....

汇智网教程
今天
4
0
《唐史原来超有趣》的读后感优秀范文3700字

《唐史原来超有趣》的读后感优秀范文3700字: 作者:花若离。我今天分享的内容《唐史原来超有趣》这本书的读后感,我将这本书看了一遍之后就束之高阁了,不过里面的内容一直在在脑海中回放,...

原创小博客
今天
9
0
IC-CAD Methodology知识图谱

CAD (Computer Aided Design),计算机辅助设计,指利用计算机及其图形设备帮助设计人员进行设计工作,这个定义同样可以用来近似描述IC公司CAD工程师这个岗位的工作。 早期IC公司的CAD岗位最初...

李艳青1987
今天
12
0
CompletableFuture get方法一直阻塞或抛出TimeoutException

问题描述 最近刚刚上线的服务突然抛出大量的TimeoutException,查询后发现是使用了CompletableFuture,并且在执行future.get(5, TimeUnit.SECONDS);时抛出了TimeoutException异常,导致接口响...

xiaolyuh
今天
6
0
dubbo 搭建与使用

官网:http://dubbo.apache.org/en-us/ 一,安装监控中心(可以不安装) admin管理控制台,monitor监控中心 下载 bubbo ops 这个是新版的,需要node.js环境,我没有就用老版的了...

小兵胖胖
今天
13
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部