springmvc+freemarker实现自定义标签

freemarker自定义标签 本文内容: 1. 基于SpringMVC整合Freemarker的自定义标签实例。 2. TemplateDirectiveModle 的详解 3. 自定义标签使用的小技巧一、基于SpringMVC整合Freemarker的自定义标签实例 阅读详情
1.目标
如图是我们的目标页面的一部分,因为类目列表是每个 页面都需要展示的一部分,所以把这个属性列表提取出来,做成一个自定义标签,在不通的页面上直接引用标签,就可以直接展示了

2.编写数据提提供类,实现TemplateDirectiveModel接口

package com.dmall.mall.directive;

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

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import com.dmall.item.entity.Category;
import com.dmall.item.service.CategoryService;
import com.google.common.base.Strings;

import freemarker.core.Environment;
import freemarker.template.TemplateDirectiveBody;
import freemarker.template.TemplateException;
import freemarker.template.TemplateModel;
import freemarker.template.TemplateModelException;
import freemarker.template.TemplateDirectiveModel;
import freemarker.ext.beans.BeansWrapper;
import freemarker.ext.beans.BeansWrapperBuilder;
import freemarker.template.Configuration;
import freemarker.template.SimpleScalar;
/**
* 类目导航组件
*
* @author wangxuzheng@aliyun.com
*
*/
@Component
public class CategoryTreeDirective implements TemplateDirectiveModel{
@Autowired
private CategoryService categoryService;
private Long getPid(Map<?,?> params)throws TemplateException{
String id = getParam(params, "pid");
if(Strings.isNullOrEmpty(id)){
throw new TemplateModelException("没有指定要展示类目额pid属性");
}
return Long.valueOf(id);
}
@Override
public void execute(Environment env, Map params, TemplateModel[] loopVars, TemplateDirectiveBody body)
throws TemplateException, IOException {
Long pid = getPid(params);
List<Category> children = categoryService.findChildren(pid);
env.setVariable("categories", createBeansWrapper().wrap(children));
body.render(env.getOut());
}
protected String getParam(Map<?,?> params, String name) {
Object value = params.get(name);
if (value instanceof SimpleScalar) {
return ((SimpleScalar)value).getAsString();
}
return null;
}
public BeansWrapper createBeansWrapper() {
return new BeansWrapperBuilder(Configuration.VERSION_2_3_23).build();
}
}
3.将自定义标签的类,放到freemarker配置的变量中
<bean class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
<property name="defaultEncoding" value="utf-8" />
<property name="freemarkerVariables">
<map>
<entry key="xml_escape" value-ref="fmXmlEscape" />
<entry key="links" value-ref="links"/>
<entry key="shiro"><bean class="com.jagregory.shiro.freemarker.ShiroTags"/></entry>
<!-- 用户自定义标签 -->
<entry key="categoryTree" value-ref="categoryTreeDirective"></entry>
</map>
</property>
<property name="templateLoaderPath" value="/WEB-INF/views" />
<property name="freemarkerSettings" ref="freemarkerConfiguration" />
</bean>
3.在页面中使用自定义标签
这里,我们把每个自定义标签对应的ftl独立成 一个单独的文件,这样,就可以在多个页面中去include了,如图


category_tree.ftl文件的内容:
<!-- BEGIN SIDEBAR -->
<div class="sidebar col-md-3 col-sm-4">
<ul class="list-group margin-bottom-25 sidebar-menu">
<@categoryTree pid="1">
<#list categories as category>
<#if category.hasChild==1>
<li class="list-group-item clearfix dropdown">
<a href="javascript:void(0);">
<i class="fa fa-angle-right"></i>
${category.name}
<i class="fa fa-angle-down"></i>
</a>
<ul class="dropdown-menu">
<@categoryTree pid="${category.id}">
<#list categories as c>
<li><a href="product-list.html"><i class="fa fa-circle"></i> ${c.name}</a></li>
</#list>
</@categoryTree>
</ul>
</li>
<#else>
<li class="list-group-item clearfix"><a href="product-list.html"><i class="fa fa-angle-right"></i> ${category.name}</a></li>
</#if>
</#list>
</@categoryTree>
</div>
<!-- END SIDEBAR -->
其中@categoryTree是我们在上个步骤中 在freemarker 配置中 定义的key, 这样freemarker在解析的时候就会使用与key对应的组件处理类来执行,自定义组件也支持传递参数,在这个例子中,我们要展示的一个树形菜单,所以我们要把上级菜单ID传递进去(pid),组件处理类处理完后,通过env.setVariable("categories", createBeansWrapper().wrap(children));把结果放到模版渲染上下文中,这样在@categoryTree标签内就可以使用组件提供的处理结果了
spring mvc freemarker 自定义标签 spring mvc freemarker 自定义标签demo spring mvc 通过自定义的标签在jsp页面调用,初学,记录下做个备忘 立即下载

相关推荐

Freemarker 自定义标签 简单案例

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

Freemarker自定义方法变量

最近在项目开发中使用了freemarker,并在前台显示文本时遇到这样一个需求,当长度超过10个字时只显示出前面10个字,并在后面加...。这里就可以在freemarker中实现一个自定义方法变量。 实现自定义方法变量基本步骤: 1.先实现TemplateMethodModel或TemplateMethodModelEx接口(TemplateMethodModelEx 继承自TemplateMethodModel 接口,我这里使用的是TemplateMethodModelEx接口),再覆盖该接口的Ob..

daobuxinzi的博客 889

STM32_WS2811驱动

STM32的WS2811驱动

健身房 2839

FreeMarker自定义标签编写

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

m0_53611007的博客 1792

相机标定-张正友棋盘格标定法

(X,Y,Z)为在世界坐标系下一点的物理坐标 ( u , v ) 为该点对应的在像素坐标系下的像素坐标 引入齐次坐标的原因:引入齐次坐标的目的是为了升维,将坐标从二维坐标变为三维坐标。 2.相机成像过程 相机成像系统中,共包含四个坐标系:世界坐标系、相机坐标系、图像坐标系、像素坐标系。 (1)世界坐标系(,,) 描述目标在真实世界中的位置引入的参考坐标系。 (2)相机坐标系(,,) ...

qq_41275123的博客 1万+

单晶塑性abaqus-umat自学

单晶塑性abaqus-umat 摘要1. 简介2. 单晶弹塑性本构模型回顾2.1运动学 本文以翻译黄永刚老师的umat文章为主,这个颜色的为个人的理解。 摘要 包含单晶塑性的abaqus用户材料子程序。本文回顾有限元形式的单晶弹塑性和黏弹塑性,包含小变形理论,以及严格的有限变形和有限旋转理论。单晶的非弹性变形由于晶体滑移,假定遵从Schmid准则。提出多种多样的分切应力与剪切变形的自硬化和潜硬化关系,并且包含在子程序内。 1. 简介   有限元程序ABAQUS已经广泛应用在固体的变形与应力分析。除了自身大量

Niklas4088的博客 1万+

freemarker标签定义变量

ftl页面在使用freemarker标签的时候,如果有需要定义一个页面的变量, 那么就可以借助<#assign/>标签来实现 调用示例 <#assign eventindex=1/> 主要作用于实现集合连续编号的功能,比如有两个集合遍历,但是遍历的数据编号需要连续的情况下 如果是普通的页面可以通过其他途径实现,在一些支持freemarker表达式的xml文件中(比如word)实现该功能用上assign标签较为方便 ...

Shawsw的博客 1845

STM32F405实战:手把手教你实现永磁同步电机无感FOC控制(附完整工程文件)

本文详细介绍了基于STM32F405微控制器实现永磁同步电机无感FOC控制的完整实战方案。文章从硬件搭建、CubeMX配置入手,逐步讲解了FOC核心算法、SVPWM调制,并重点阐述了如何结合HFI高频方波注入与滑模观测器(SMO)实现全速域无感控制。内容涵盖算法原理、代码实现、参数整定及调试技巧,并附有完整工程文件,为开发者提供从理论到实践的全面指导。

sun99的博客 265

springboot+freemarker 增加自定义变量和自定义

这个主要是因为喜欢在spring+springmvc中用freemarker时,增加${base} ,${jsPath},${cssPath}等等全局的变量来再也没使用,这样不用使用相对路径,或者有统一的资源服务器的时候,可以动态的改变路径。还有自己定义一些方法在freemarker模板中使用,例如${conver('userType',e.user.type)},我们可以在后端对一些参数值进行转

ScDream 1万+

YOLOv13涨点改进 | 全网独家创新、高效涨点改进篇 | CVPR 2024 | YOLOv13引入SHSA单头自注意力模块,减少冗余的多头注意力,轻量化改进,助力目标检测和图像分类任务高效涨点

本文提出了一种改进YOLOv13模型的新方法——SHSA(单头自注意力)模块,用于提升目标检测任务的计算效率和推理速度。SHSA通过简化多头注意力机制为单头结构,显著减少了计算冗余和内存占用。实验表明,该模块在保持精度的同时,在GPU、CPU和移动设备上分别实现了3.3倍、8.1倍和2.4倍的加速效果。文章详细介绍了SHSA的结构原理、核心代码实现方法,以及如何集成到YOLOv13的配置文件中。这种改进特别适合资源受限设备,为实时目标检测提供了更优的速度-精度平衡方案。

Ai缝合怪、助力小伙伴高效发论文 506

基于cnn version_transformer VIT模型的动物图像分类 完整代码+数据 动物分类教程

基于cnn version_transformer VIT模型的动物图像分类 完整代码+数据 动物分类教程

机器学习深度学习业余选手 1001

FreeMarker中的自定义指令和四种变量

完整版见https://jadyer.github.io/

半步多 5082

【YOLOs-CPP-图像分类部署】04-项目优化(加速部署)

本文详细介绍了将YOLO图像分类C++部署项目从CMake迁移到Visual Studio控制台应用的全过程。针对低配CPU性能瓶颈问题,作者通过替换多线程HPP代码为官方实现,并采用448x448固定输入尺寸优化推理速度。项目配置包含OpenCV和ONNX Runtime环境设置,实现了图像批量处理、分类结果显示及结果日志输出功能。关键步骤包括依赖库配置、DLL部署和代码调试,最终在Windows平台成功实现高效CPU推理。该方案显著提升了低配硬件的兼容性,为图像分类任务提供了稳定的部署解决方案。

深耕CV 353

springMVC+freemarker实现自定义标签

在开发过程中,有些需要引用到重复的页面,或者动态的数据 修改数据库是可以实现,但是太麻烦了。 freemarker自定义标签在开发中用途很广,就说个入门实例吧 基于springmvc。 首先需要导入对应的jar包,maven地址 <dependency> <groupId>org.freemarker</groupId> ...

陈灬大灬海 130

2026华为OD机考双机位C卷++ 双机位B卷 + 双机位A卷 + 2025C/B/A卷+ 往年真题 - 题库目录分值说明 + 考点说明+在线OJ

2025华为OD机考双机位C卷++ 双机位B卷 + 双机位A卷 + 2025C/B/A卷+ 往年真题 - 题库目录分值说明 + 考点说明+在线OJ

算法大师! 5万+

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

spring mvc项目中利用freemarker生成自定义标签

spring mvc +freemarker的项目中,我们想yao

uk8692的专栏 3949

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

java calendar ftl,spring mvc项目中利用freemarker生成自定义标签

spring mvc +freemarker的项目中,我们想要在html页面上利用自定义标签,来方便完成我们的一些功能,除了在页面上定义标签外,我们还可以利用程序来定义。首先要写一个类UpperDirective.Java来实现TemplateDirectiveModel接口,代码如下:[java] view plain copypublic class UpperDirective implem...

weixin_35949298的博客 143

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

freemarker(其他引擎差不多)下shiro自定义标签

1.SpringMvc配置,定义一个shiro集成freemarker自定义标签的配置类 2.配置类的核心是new ShiroTags 这个来自于标签库,下载shiro-freemarker-tags GitHub地址:https://github.com/jagregory/s...

chengshanmu0110的博客 172

Spring+SpringMVC+Freemarker(自定义标签)+Mybatis+Log4j快速整合

SpringMVC注解功能丰富,使用简单,作为web框架。 Freemarker标签库非常强大,可以控制模版缓存时间性能也不错,view层使用。 Mybatis动态SQL,使用方便,作为持久层框架。 此外项目使用Mysql数据库,dbcp数据源,quartz管理定时任务。 一、jar包准备 使用maven构建项目管理jar包 junit

qq_32047637的博客 689

spring mvc + freemarker 的简单实现全步骤

第一步:引入需要的jar包

oYongYong1的专栏 818

在FreeMarker框架中使用Shiro的Tag标签

可以先了解下shiro 第一步:下载shiro-freemarker-tags GitHub地址:https://github.com/jagregory/shiro-freemarker-tags  可以先看一下他的说明文档,有一个初步的了解。 第二步:Spring MVC配置 自定义一个ShiroTagFreeMarkerConfigurer继承Spring本身提供的Fre

pshaoyi的专栏 8078

在Spring+FreeMarker框架中使用Shiro的Tag标签

为什么80%的码农都做不了架构师?>>> ...

weixin_34023982的博客 101
上一篇: 在Ajax请求中处理登录session超时的方法
下一篇: Drools Workbench 7.2.0.Final综合学习-驾照申请案例
CrazyCoder2010
博客等级 码龄16年 298粉丝 110原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值