Freemark自定义标签,调用java静态方法

freemarker 自定义freeMarker标签 NULL 博文链接:https://zhenghuazhi.iteye.com/blog/1923544 立即下载

为什么要自定义标签?

答案在第一个问题的第三点,我们需要一个前端灵活的架构,在不更改后端逻辑的基础上,很容易的改造前端逻辑。

在SSH的架构中,自定义标签已经可以方便的实现(struts2的标签也是基于freemarker的自定义标签),但是用起来还是不够爽,需要大量的配置,繁琐的依赖注入等。用了jfinal以后,发现自定义freemarker标签在该框架中用起来极爽,寥寥几个类,几行代码就能将自定义标签应用起来。废话不多说了,上代码吧。


/**
 *
 */
package cn.com.qukee.controller.label;

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

import org.apache.log4j.Logger;

import cn.com.qukee.common.ApplicationContextFactory;
import cn.com.qukee.controller.video.c_video;
import cn.com.qukee.modules.subject.dao.SubjectDao;
import cn.com.qukee.modules.subject.webservice.bean.GradeResponse;
import freemarker.core.Environment;
import freemarker.template.TemplateDirectiveBody;
import freemarker.template.TemplateDirectiveModel;
import freemarker.template.TemplateException;
import freemarker.template.TemplateModel;
import freemarker.template.TemplateModelException;

/**
 * @author
 *
 */
public class QueryGradeNameById implements TemplateDirectiveModel {
    Logger logger = Logger.getLogger(QueryGradeNameById.class);

    @Override
    public void execute(Environment env, Map params, TemplateModel[] loopVars,
            TemplateDirectiveBody body) throws TemplateException, IOException {
        // TODO Auto-generated method stub

        if (params.isEmpty()) {
            throw new TemplateModelException("参数不能为空!");
        }
        if (loopVars.length != 0) {
            throw new TemplateModelException("本指令不允许有循环变量!");
        }
        String gradeName = "";
        try {
            Integer vars = Integer.parseInt(params.get("val").toString());
            SubjectDao subjectDao = (SubjectDao) ApplicationContextFactory
                    .getInstance().getBean("subjectDao");
            GradeResponse resp = subjectDao.findByGName(vars);
            gradeName = resp.getList().get(0).getGradeName();
        } catch (ClassCastException ce) {
            ce.getMessage();
            logger.info("参数转换错误!");
        } catch (IndexOutOfBoundsException ie) {
            ie.getMessage();
            logger.info("该ID没有相应的转换值!");
        } catch (Exception e) {
            e.getMessage();
            logger.info("数据库内部错误!");
        }
        env.getOut().write(gradeName);
    }

 
}


第二步:控制层里用request.setAttribute("gradeLabel", new QueryGradeNameById());进行绑定

第三步:页面使用 标签  <@gradeLabel val="${vo.gradeId}"/>


搞定完工!

如果不想每个控制层都绑定,就可以写到全局变量的拦截器中


如果用jfinal的情况下

拦截器可以省略掉,直接在config里配置自定义的标签
FreeMarkerRender.getConfiguration().setSharedVariable("_category_list", new CategoryListDirective();

Freemarker 自定义标签 简单案例 里面 集合了 一个 简单的 Freemarker demo 代码 和一个 freemarker 自定义标签代码 立即下载

相关推荐

TPAMI 2025新作LRFormer复现笔记:我的Windows 11 + RTX 4090配置全流程

本文详细记录了在Windows 11系统下使用RTX 4090显卡复现TPAMI 2025顶会论文LRTransformer的完整流程,包括硬件配置、系统优化、Python环境搭建及模型训练中的常见问题解决方案。特别针对Windows平台特有的路径管理、CUDA版本冲突和显存优化等关键技术细节提供了实用指南,帮助开发者高效完成环境搭建和模型训练。

weixin_29094301的博客 414

freemarker空值的多种处理方法

如果empty标签没有在servlet中添加key或者值为null,会报错 empty Value Expression newTag is undefined。有人说这是个好的控制错误的机制,但本人不这么认为,因为空值太常见了,谁知道什么时候里面就成空值了?每个变量理论上都有可能。 难道每个变量都要加入一个判断?就像struts中丑陋的标签?既然是模板引擎,就要灵活,何必来那么多限制? ...

Unas的仙宫 983

避坑指南:在Ubuntu 20.04上从零部署IS-Fusion环境(含CUDA 11.1和PyTorch 1.10.1配置)

本文提供了在Ubuntu 20.04系统上从零部署IS-Fusion 3D目标检测环境的详细避坑指南。内容涵盖CUDA 11.1、PyTorch 1.10.1、spconv等核心组件的精确版本安装与兼容性配置,并指导如何准备nuScenes数据集及启动模型训练,旨在帮助研究者和开发者高效搭建稳定的多模态融合算法开发环境。

gitlab7runner的博客 553

freemarker调用java静态方法以及枚举

<br />Freemarker渲染视图采用的是一个 模型+数据 = 页面  的方式,这也是模板渲染引擎的通用模式,对于freemarker渲染页面的时候一些特殊的数据格式转换、随机数获取等需求,如果很难通过freemarker本身的标签完成,可以通过调用java静态方法来完成。前提是这个方法必须是静态。允许传递参数。<br />实现这个需求,使用的便是freemarker的BeansWrapper这个类,他借用TemplateHashModel可以从web容器中获取指定类名的bean并通过传统的如spri

quzishen的专栏 1万+

python 解析bag文件(不用安装ros系统)

在网上找了很多教程都是安装ros系统之后再通过ros自带的包来解析bag文件,但我并不想安装ros系统,之前我也是通过安装ros系统在来解析bag文件,我觉得不是很方便,主要有两点原因,(1)安装ros需要root用户权限(2)ros系统只支持Python2的接口,一般我都是Python3的conda环境,这样每次调用rosbag时都需要先把当前的conda环境注释掉,不然会报错,然后使用完毕在回到conda环境 ros本身是提供了C++和Python的接口,因为我目前的诉求就只是解析bag文件,我想肯定有

sabrinalx的博客 1万+

基于Dify1.9知识库流水线模板的思考——图像和表格数据处理

本文探讨了Dify1.9知识库流水线中LLM节点对文档图像/表格增强处理的优化方案。针对当前仅在内容后追加说明的简单做法,提出了结构化标注的改进方法:通过唯一ID和注释块标记图像/表格及其描述,确保内容可精准对齐。文章详细阐述了该方案的解析处理流程、数据结构化表示方法,以及在RAG检索和文档还原中的具体应用。关键经验包括:必须结构化标注非文本内容、LLM增强的必要性、语义向量化处理等。该方案解决了原始方法在内容重排、相似元素区分和检索精度等方面的问题。

roseey的专栏 1442

freemarker标签调用方法

ftl页面                                                    ${e.title!''}${e.description!''}                                                ${e.expireTime?string("yyyy-MM-dd")}长期有效${e.title!''}   

streetlight8023的专栏 5379

【实战】Python 携程酒店价格实时抓取爬虫项目全解析

摘要:本文介绍了一个基于Python的携程酒店价格实时抓取系统开发方案。系统采用Requests、BeautifulSoup和Selenium等技术栈,实现了多城市、多日期的酒店数据采集,包括价格、评分、位置等关键信息。通过请求头伪装、IP代理、随机等待等反爬策略,有效应对携程的反爬机制。系统支持数据清洗、去重和CSV/Excel导出,并提供了多线程优化、代理池集成等进阶方案。本文详细阐述了技术原理、代码实现和优化策略,同时强调了数据采集的合法合规性,为旅游行业数据分析提供了可靠的数据获取方案。

2503_91057718的博客 2608

freemarker 调用java_freemarker页面中调用java方法

首先,经过本人的测试,freemarker只能调用Java的Public static 方法及属性背景说明:框架使用的是spring+springmvc+freemarkerpackage com.zxsd.test.util;import java.util.HashMap;import java.util.Map;public class UrlUtil {private static fin...

weixin_42515331的博客 830

Android14 Qcom 从Framework到Driver带你连接WIFI(一)

前面已经讲完了WIFI打开的流程,那么通过UI这时候是可以选择需要连接的网络进行连接。从这里开始我们看连接的流程。

IAYLBL的博客 696

【RT-DETR多模态融合改进】| 自研 多模态大核选择模块:MM_LSK,适配多模态图像信息融合

本文记录的利用改进的多模态大核选择模块(MM-LSK)优化RT-DETR,构建可见光-红外双模态目标检测网络。在遥感等大尺寸图像的可见光-红外双模态小目标检测任务中,单模态检测易受光照、云雾、背景干扰等因素影响,且小目标外观信息匮乏,无法仅基于单模态外观实现较好的识别,因此需要融合双模态互补特性与广泛的跨模态上下文信息进行辅助。

Limiiiing的博客 382

5分钟学会Freemarker自定义标签(java后台宏)实现

freemarker自定义标签(java后台宏)实现 一、前言 freemarker自定义标签(java后台宏)实现。 在此记录下,分享给大家。 二、freemarker自定义标签(java后台宏) ...

猿医ˉ生 2357

麒麟操作系统安装教程(保姆级)

本文介绍了如何在VM中安装麒麟操作系统,文章详细的介绍了麒麟操作系统按钻过步骤。

啊渊的专栏 1万+

jeecms学习二-------学习freeMark标签及自定义标签的用法

今天主要是学习了jeecms中freeMark标签的用法, 仅仅是用法, 没有研究原理.    因为以前没有用过freeMark, 所以今天看了一下文档, 了解了他的标签含义及基本用法, 发现跟 html 差不多, 然后结合jeecms中的自定义标签, 学习了一下基本用法   首先, 如果是 自定义标签的话肯定有一个标签处理类, 这点好像以前写jsp页面自定义标签的时候用到过. 例如jeecm

java-北京-菜鸟 1330

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

freemarker java 方法调用_Freemarker使用java枚举值、静态属性和调用静态方法

1、前言:在java后台,规范的编码方式将会使我们使用很多静态属性,枚举值等,还有许多工具类,都会定义很多静态方法方便调用,这些都方便了我们java后台的开发,但如果结合到前台freemarker模板该如何使用呢,freemarker模板并不能像jsp那样import标签导入java类。首先我们来看这么一个枚举值类OptionValueType:package com.cangzhitao.com...

weixin_34696129的博客 983

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

freemark自定义标签

1. [代码]实现自己的自定义 freemarker标签     跳至 [1] [2] [3] [4] [全屏预览] ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22

IT老王 453

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

java ftl 标签_Java中Freemarker TemplateDirectiveModel自定义标签详解

Java中Freemarker TemplateDirectiveModel自定义标签详解java中freemarker通过实现TemplateDirectiveModel接口,用户可以自定义标签(指令)进行任意操作,任意文本写入模板的输出。定义public void execute(Environment env, Map params, TemplateModel[] loopVars, Te...

weixin_36463292的博客 489

spring3+freemark自定义标签

&lt;bean id="viewResolver"   class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver"&gt;   &lt;property name="suffix"&gt;    &lt;value&gt;.ftl&lt;/value&gt;   &lt;

天道酬勤 235

FreeMark结合spring boot制作自定义标签

1.1 fileTag, 文件标签, 根据fileId值得到云端 代码如下: package com.doui.business.service.tag; import java.io.IOException; import java.util.Map; import org.springframework.beans.factory.annotation.Autowired; impor...

qq_34091758的博客 945

Freemark生成Word文件的加密处理

Word文件加密处理Word文件的加密处理具体实现 Word文件的加密处理 最近完成了一个使用freemark生成文档的需求。本次实现使用的是freemark模板技术。 具体实现 首先使用wps或者word编辑模板内容,然后把编辑好的模板文件另存为xml(可以把文件后缀名改成ftl也可以不做修改) 编辑生成文档工具类 package cn.linkey.rulelib.ProcessChg.template; import java.io.BufferedWriter; import java.io

qq_38951990的博客 927

java 图表 word_java Freemark模板生成word图表及目录

java用freemark生成word模板,一直都会遇到各种各样的问题;这次遇到的问题就是用freemark模板生成word目录和数据图表。解决方法如下:1.制作word样式,word样式需要和客户方需求一致;然后需要将word另存为xml文档(一定要将xml文档的样式表拷入到freemark模板中)。2.找到对应的目录位置,然后将目录放到freemark的对应位置,在目录的对应位置填充freem...

weixin_42310572的博客 805

如何自定义标签(.tld文件的使用) --Freemark

struts中可以通过struts.xml配置action返回对应的jsp /test.jsp 也可以返回对应的freemark模板页面 /fmTest.ftl 很多的时候我们需要在freemark中使用struts的标签 但是freemark中默认是不支持struts的标签库的,这时我们需要引入对应得.tld文件              

DeanBlog的博客 3858

java freemark 使用_java中Freemarker macro自定义指令详解

java中Freemarker macro自定义指令详解java Freemarker中macro可以用于实现自定义指令,通过使用自定义指令,可以将一段模板片段定义成一个用户指令。定义.........#macro>name:指定的是该自定义指令的名字,使用自定义指令时可以传入多个参数paramX:指定使用自定义指令时报参数,使用该自定义指令时,必须为这些参数传入值nested:输出使用自定...

weixin_39793434的博客 382

自定义标签封装对Freemarker的操作

所需jar包freemarker.jar、gson.jar(操作json串)ftl模板文件(header.ftl),路径为“webroot/templates”目录下<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html;charset=utf-8"> <title>联系人</title> </

chinoukin的博客 2152

freemarker实现自定义标签

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

凌康的博客 1185
上一篇: Spring源码学习
下一篇: web项目使用Amchar制度图标
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值