SpringMVC Freemarker 自定义标签

1:实现 freemarker.template.TemplateMethodModelEx 接口对于 freemarker-2.3.20版本, 更早版本实现freemarker.template.TemplateMethodModel 接口

且加入Spring管理,代码如下:

package com.sqtoon.orderserv.web.commons.freemarker.tag;

import java.util.List;

import org.apache.commons.collections.CollectionUtils;
import org.springframework.stereotype.Component;

import freemarker.template.TemplateMethodModelEx;
import freemarker.template.TemplateModelException;

@Component("dictItemTag")
public class DictItemTag implements TemplateMethodModelEx { // TemplateMethodModel

	@SuppressWarnings("rawtypes")
	@Override
	public Object exec(List arguments) throws TemplateModelException {
		StringBuilder ret = new StringBuilder("DictItemTag");
		if (CollectionUtils.isNotEmpty(arguments)) {
			for (Object obj : arguments) {
				ret.append("-").append(obj);
			}
		}
		return ret.toString();
	}

}

 

2: 配置Spring 中的org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer :

<!-- FreeMarker配置 -->
 	<bean id="freeMarkerConfigurer" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
		<property name="templateLoaderPath" value="/WEB-INF" />
		<property name="defaultEncoding" value="UTF-8" />
		<property name="freemarkerVariables">
			<map>
				<entry key="dictItemTag" value-ref="dictItemTag"/>
			</map>
		</property>
		<property name="freemarkerSettings">
			<props>
				<prop key="tag_syntax">auto_detect</prop>
				<prop key="template_update_delay">0</prop>
				<prop key="defaultEncoding">UTF-8</prop>
				<prop key="output_encoding">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>
				<prop key="classic_compatible">true</prop>
				<!-- <prop key="auto_import">/ftl/spring.ftl as s</prop> 
				<prop key="template_exception_handler">ignore</prop> -->
			</props>
		</property>
	</bean>

 3:页面使用:

${dictItemTag('one!','two!!','three!!!','go!!!!')}

 

页面输出结果为:

DictItemTag-one!-two!!-three!!!-go!!!!

4:完毕!

Freemarker是一种模板引擎,可以用于生成动态的文本输出。在Freemarker中,可以通过自定义标签来扩展其功能。有几种方法可以实现Freemarker自定义标签。一种方法是使用`<macro></macro>`宏定义标签,实现TemplateDirectiveModel接口的execute()方法,并编写相应的Java代码。这种方法非常灵活。 在自定义标签的execute()方法中,可以通过环境变量environment获取到Write对象,通过map获取到传入的参数,通过templateModel获取到模板中的数据,通过templateBody获取到标签内的内容。通过这些对象和方法,可以实现自定义标签的功能,并在标签内执行其他自定义标签或者Freemarker内置标签。 华智经纬CMS是一套基于Java技术开发的内容管理系统,它继承了Freemarker的强大、灵活的标签,可以方便地自定义显示内容和显示方式,从而生成全站静态页面。它还支持自定义路径结构,全面提高页面访问速度。华智经纬CMS基于目前流行的SpringMVC和性能较高的MyBatis。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [FreeMarker自定义标签编写](https://blog.csdn.net/m0_53611007/article/details/119651082)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [3、用户模块-日志管理-多条件的查询分页操作-代码编写](https://download.csdn.net/download/flysent/8148195)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值