freemarker如何编写自定义标签

FreeMarker模板引擎:创建自定义分页标签宏指南 本文还有配套的精品资源,点击获取 简介:FreeMarker是一个用于生成动态文档的模板引擎,在Java Web开发中常用。本文介绍了如何在FreeMarker中实现自定义分页标签宏,以便更有效地管理和展示大量数据。我们首先定义了一个名为 paging 的宏,接收当前页数、总页数、每页记录数等参数,并在模板中调用。宏内部通过HTML和FreeMarker指令创... 阅读详情

编写自定义标签需要实现 freemarker.template.TemplateDirectiveModel 接口
demo如下

freemarker模板   freemarker自定义标签.ftl
<#assign x = 1>
<@repeat count=4>
Test ${x}
<#assign x = x + 1>
</@repeat>

<@repeat count=3; cnt>
${cnt}. Test
</@repeat>
TemplateDirectiveModel  接口的实现类

package com.yydb.lp.freemarker.customlabel;

import java.io.IOException;
import java.io.Writer;
import java.util.Map;

import freemarker.core.Environment;
import freemarker.template.SimpleNumber;
import freemarker.template.TemplateDirectiveBody;
import freemarker.template.TemplateDirectiveModel;
import freemarker.template.TemplateException;
import freemarker.template.TemplateModel;
import freemarker.template.TemplateModelException;
import freemarker.template.TemplateNumberModel;

public class RepeatDirective implements TemplateDirectiveModel {

    /**
     * @param environment
     * @param map
     *            <@repeat count=3;
     *            cnt>其中count=3就以键值对的形式存在map中,只是3不是java类型,而是TemplateModel类型
     *            (整数:TemplateNumberModel
     *            ,字符串:TemplateScalarModel,boolean:TemplateBooleanModel 等),
     *            所以利用map.getValue(......)返回的是一个TemplateModel类型的数据,需转换成int类型数据。
     * @param atemplatemodel
     *            变量,如cnt,atemplatemodel是一个TemplateModel类型的数组,我们可以在程序中给它赋值
     * @param templatedirectivebody
     */
    @Override
    public void execute(Environment environment, Map map, TemplateModel atemplatemodel[], TemplateDirectiveBody templatedirectivebody) {
        Writer out = null;
        try {
            if (templatedirectivebody == null) {// 自定义标签必须有内容,即自定义 开始标签与结束标签之间必须有 内容
                throw new TemplateModelException("null body");
            } else {
                out = environment.getOut();
                // TemplateNumberModel 数字类型, TemplateScalarModel 字符串类型,
                // TemplateBooleanModel boolean类型
                TemplateNumberModel numberModel = (TemplateNumberModel) map.get("count");
                int count = numberModel.getAsNumber().intValue();
                for (int i = 0; i < count; i++) {
                    if (atemplatemodel.length > 0) {
                        atemplatemodel[0] = new SimpleNumber(i + 1);
                    }
                    templatedirectivebody.render(out);
                }
            }
        } catch (TemplateModelException e) {
            e.printStackTrace();
        } catch (TemplateException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if(out != null) {
                try {
                    out.flush();
                    out.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

}

测试代码

import freemarker.cache.FileTemplateLoader;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;

public static void  main(String[] aegs) throws IOException, TemplateException {
        Configuration configuration = new Configuration();
        configuration.clearTemplateCache();

        configuration.setTemplateLoader(new FileTemplateLoader(new File("D:/")));
        Template template = configuration.getTemplate("/freemarker自定义标签.ftl",Locale.CHINA,"UTF-8");

        Map<String,Object> rootMap = new HashMap<String,Object>();

        //以下两行代码功能是一样的,这里我们使用第二行代码
//      configuration.setSharedVariable("repeat", new RepeatDirective());
        rootMap.put("repeat", new RepeatDirective());


        StringWriter sw = new StringWriter();
        template.process(rootMap, sw);
        System.out.println(sw.toString());
    }
freemarker 自定义freeMarker标签 NULL 博文链接:https://zhenghuazhi.iteye.com/blog/1923544 立即下载

相关推荐

Freemarker 自定义标签 简单案例

里面 集合了 一个 简单的 Freemarker demo 代码 和一个 freemarker 自定义标签代码

如何实现自定义freemarker标签

每次遇到不懂的,亦或是写没写过的效果,总要到网上搜搜,虽然有时没有具体的解决办法,但是总能给我不少的灵感,所以网友们的博客文章真的给了我特别大的帮助,我也总觉得,我也应该分享分享我所知道的经验,为我们苦逼的程序员,大家共同学习,共同进步,好了废话不多说了,我今天就教教大家如何使用freemarker的自定义标签吧!希望大家共同的学习,如果有什么错误的地方,亦或是不懂的地方,欢迎加扣一起探讨! 273

心如止水博客 1523

代码生成器必备jar包:Freemarker-2.3.23

import freemarker.template.TemplateDirectiveModel; Freemarker-2.3.23低于2.3没有上面的命名空间 我下载了好几个版本的看了的

FreeMarker自定义标签编写

一、freemarker 实现自定义标签的方法 : 使用 <macro></macro> 宏定定义标签 实现 TemplateDirectiveModel的 execute() 方法,写相应的Java代码(这种方式更加的灵活) 二、参数说明: environment : 是环境变量,在这里我们可以拿到 通过 environment.getOut 拿到 Write 。 map :这里我们可以得到参数,这里的参数是以 键值对的形式存在的。 templateMod...

m0_53611007的博客 1792

XS5018A TX ISP芯片同轴高清模拟输出图像处理芯片用户指南

当看门狗开启且系统异常,看门狗模块得不到喂狗信号时,自动产生看门狗复位信号,复位​​​​​​​。分量上与人眼对光谱的响应通常是有偏差的,通常通过一个色彩校正矩阵校正光谱响应的交叉效。但实际上由于电路的作用,复位模块对整个芯片及各个功能模块的复位进行统一管理,负责产生各个模块的软复位信。每个区域前景色可以在 16 个色表中查找,单个区域的前景色统一,各个区域的前。较弱的坏点被放大成刺眼的白点和明显的黑点,强烈推荐开启动态坏点校正功能。四种制式,通过寄存器配置,可以很方便的实现四种制式的切换、且可以对截止。

2403_88922712的博客 1963

如何让 RTX 5090 开启 PCIE P2P 以加速多卡通信

RTX 5090 基于新的 Blackwell 架构。NVIDIA 出于对某些主板兼容性(如 IOMMU、Resizable BAR 策略)的保守考虑,**屏蔽了 5090 的 BAR1 P2P 功能**。 我们需要通过 Patch 驱动源码,强制开启这一隐藏功能。 开启 P2P 后,PyTorch 的集合通信算子(Multi-GPU 训练的核心)延迟显著降低,**All-Reduce 甚至降低了 60% 以上**。

Hi20240217的博客 1743

freemarker实现自定义标签

freemarker实现自定义标签 freemarker实现自定义标签其实并没有什么难度,这个功能我们叫自定义标签,在官网中称为指令,也并不是什么高级技术,只是大家没发现而已,参考下官网文档就能实现:https://freemarker.apache.org/docs/pgui_datamodel_directive.html http://freemarker.foofun.cn/pgui_datamodel_directive.html 更多功能需要自己去研究,编写这编文章的目的是因为我在网上无法搜索到

凌康的博客 1185

winget安装提示:执行此命令时发生意外错误: InternetOpenUrl() failed. 0x80072efd

当我们使用Winget包管理器安装应用,提示错误:执行此命令时发生意外错误: InternetOpenUrl() failed. 0x80072efd 该怎么处理呢?请听我娓娓道来。

Linux I Tell U 8139

freemarker编写自定义标签

freemarker提供了TemplateDirectiveModel接口,我们可以利用它来实现自定义标签的编写。

风的专栏 3023

最新测算源码PHP算命源码-风水八字-八字起名-塔罗牌占卜

未来,随着技术的发展和用户需求的变化,我们可以继续对系统进行升级和优化,以满足更多用户的需求和期望。数据库设计:创建一个名为bazi的数据库表,包含以下字段:id(自增ID)、name(姓名)、sex(性别)、birth_date(出生日期)、birth_time(出生时间)、bazi(八字结果)。数据库设计:创建一个包含塔罗牌信息的数据库表,如tarot_cards,包含字段:id(塔罗牌ID)、name(塔罗牌名称)、meaning(塔罗牌含义)等。根据操作系统的不同,PHP的安装方法会有所不同。

shanbeizi的博客 2421

UE5新手必看:如何在UMG控件中嵌入浏览器实现Web页面展示(附完整步骤)

本文为UE5新手提供了在UMG控件中无缝集成Web浏览器的完整实战指南。详细介绍了从启用WebBrowser插件、创建并配置WebBrowser控件蓝图,到编写动态加载与交互逻辑,以及在游戏关卡中实例化UI的全过程。文章还分享了性能优化技巧与常见问题排查方法,帮助开发者高效实现游戏UI内的Web页面展示与交互。

weixin_29243063的博客 712

freemarker自定义标签的写法和使用

首先是下载freemarker的jar包:下载地址 写标签类(需要继承TemplateDirectiveModel接口重写execute方法) package freemarker; import java.io.IOException; import java.io.Writer; import java.util.Map; import freemarker....

233

架构师之HBase vs MongoDB 技术选型与场景决策实战案例

面对海量数据和高并发查询,该选 HBase 还是 MongoDB?本文为你提供完整的决策框架!从数据模型对比、架构解析、六大真实场景(电信 CDR、金融行情、广告点击流、电商商品、社交档案、内容管理)到性能、一致性、运维全面对比,助你在 PB 级时序数据和灵活查询之间做出精准选择!

肖哥弹架构博客 1102

自己动手编写JEECMS自定义栏目统计标签

今天想在给Java客二级版面加入栏目文章统计效果,如下图, 查看JEECMS的源代码发现开发者版本还没有类似现成的统计标签,一种解决的办法是使用现有的JEECMS标签,像这样Struts( [@cms_content_list channel=id]${tag_list?size}[/@cms_content_list]) ,但是这样的做法非常地低效,原因是[@cms_content_li...

weixin_30340353的博客 159

大模型风电功率预测:短期,超短期,中长期的完整实现与代码详解

本文全面介绍了基于深度学习大模型的风电功率预测方法,涵盖超短期(15分钟-1小时)、短期(1-6小时)和中长期(1天-1周)三种时间尺度。文章详细阐述了数据准备与特征工程,包括数据收集、预处理和可视化分析。针对不同时间尺度,分别介绍了Temporal Fusion Transformer (TFT)、Informer和N-BEATS模型的构建、训练与评估方法,并提供了完整的开源代码实现。此外,文章还探讨了模型部署与生产环境集成,包括模型保存与加载、实时预测API以及模型监控与再训练。最后,文章总结了关键创新

专注AI大模型,软件混淆,授权 1893

YOLOv8改进 | Conv篇 | DWRSeg扩张式残差助力小目标检测 (附修改后的C2f+Bottleneck)

本文内容给大家带来的DWRSeg中的DWR模块来改进YOLOv8中的C2f和Bottleneck模块,主要针对的是小目标检测,主要创新点可以总结如下:多尺度特征提取机制的深入研究和创新的DWR模块和SIR模块的提出这种方法使得网络能够更灵活地适应不同尺度的特征,从而更准确地识别和分割图像中的物体。通过本文你能够了解到DWRSeg的基本原理和框架,并且能够在你自己的网络结构中进行添加(DWRSeg需要增加一定的计算量一个DWR模块大概增加0.4GFLOPs)。

Snu77的博客 9573

springmvc+freemarker实现自定义标签

1.目标 如图是我们的目标页面的一部分,因为类目列表是每个 页面都需要展示的一部分,所以把这个属性列表提取出来,做成一个自定义标签,在不通的页面上直接引用标签,就可以直接展示了 2.编写数据提提供类,实现TemplateDirectiveModel接口 package com.dmall.mall.directive; import java.io.IOEx

无证程序员 3204

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

spring中freemarker自定义标签详解

最近因工作需要,从网上搜了一个jeecms网站,准备进行借鉴使用,发现里面对模板用的不错,前面虽说也对freemarker有用,但是还没有这么深入,所以就查了一些资料,下面进行总结下。 一、jar包准备 首先是Spring、SpringMVC的依赖jar包…… 然后是Freemarker的依赖jar包,我使用的是freemarker-2.3.20.jar,如果使用maven的话可以直接在

qixisuda的博客 3085

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

SSH 项目 Freemarker自定义标签配置使用

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34041003的博客 167

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Freemarker自定义标签

springboot 环境 查询字典标签 @Component public class DicTag implements TemplateDirectiveModel {       @Autowired     private IDicService dicService;       @Override     publi...

德叔 2234

JEECMS自定义标签

查看JEECMS的源代码发现开发者版本还没有类似现成的统计标签,一种解决的办法是使用现有的JEECMS标签,像这样Struts( [@cms_content_list channel=id]${tag_list?size}[/@cms_content_list] ) ,但是这样的做法非常地低效,原因是[@cms_content_list]标签会把所有当前栏目的文章内容对象查询出来,做全表查询!没办...

weixin_30432007的博客 128
上一篇: cookie 小解
下一篇: 在web项目中使用 ThreadLocal 要谨慎,使用不当容易造成内存溢出
三易的博客
博客等级 码龄15年 42粉丝 89原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值