当前位置: 首页 > news >正文

freemarker自定义标签

freemarker 自定义标签


有两种方法,一种是Spring注解添加自定义标签 一种的编码添加自定义标签


第一种:编码添加自定义标签

步骤一:添加自定义解析器

创建一个类继承 FreeMarkerConfigurer 类.重写afterPropertiesSet方法


示例:

@Override
	public void afterPropertiesSet() throws IOException, TemplateException {
		super.afterPropertiesSet();
		this.getConfiguration().setSharedVariable("boolean",
				new BooleanDirective());
	}

setSharedVariable() 第一个是你freemaker要使用的标签名称 ,可以自定义 ,第二个是你实现的自定义标签


配置解析器

<bean class="这个class改成自定义的解析器">
	<property name="templateLoaderPath" value="/WEB-INF/page/" />
</bean>


详细讲解下BooleanDirective 实现

创建 BooleanDirective 类 可以自定义名称 实现TemplateDirectiveModel接口

重写 execute 方法

Environment获取输出流。Map 自定义标签传过来的 <key,值> ,TemplateModel[]这个我也不是很清楚,很少用,可以自己去查资料

TemplateDirectiveBody用来输出.


Writer out = env.getOut();
TemplateScalarModel scalarModel = (TemplateScalarModel) params.get("flag");
boolean flag = scalarModel.getAsString().equals("123");
if (flag) {
	body.render(out);
}else {
	
}

params.get() 返回有3中数据类型:

TemplateNumberModel 数字类型, TemplateScalarModel 字符串类型,TemplateBooleanModel boolean类型


根据你实际的需求走,我这里接收的是TemplateScalarModel 类型的

我得到一个值 然后判断是不是123 如果是的话,进行 标签的内容 输出 ,不是的话 标签的内容就不进行输出

模版调用:

[@boolean flag="123"]测试boolean[/@boolean]


这个flag是你那里map得到的key

到这里结束了,可以自己去试试.

还有一个简化添加自定义标签

Spring注解添加自定义标签



<bean id="booleanBean" class="com.shiro.freemaker.utils.BooleanDirective"></bean>


<bean id="booleanBean" class="自定义标签全类名"></bean>

<bean class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
	<property name="templateLoaderPath" value="/WEB-INF/page/" />
	<property name="freemarkerVariables">
		<map>
			<entry key="boolean" value-ref="我和自定义标签全类名对应" />
		</map>
	</property>
</bean>


就可以了.2种方法随你想用哪一个


可以还需要: freemarker中使用shiro标签

转载于:https://www.cnblogs.com/zhousiwei/p/10625866.html

相关文章:

  • [转]使用JQuery读取XML文件数据
  • android安装
  • jQuery 读xml并search
  • IO模型介绍 以及同步异步阻塞非阻塞的区别
  • IDEA的查询引用、调用关系图的功能(转)
  • 【不抱怨21天】第一天 - The First Day
  • 201521123054《Java程序设计》第8周学习总结
  • DataTable与Xml的相互转化
  • 【转】C#三大特性之 封装、继承、多态
  • POJ3664
  • js不重复导入
  • 压缩文件函数库(转载)
  • 抽象类(abstract class)与接口(interface)
  • android 图片特效处理之锐化效果
  • 去除末尾字符
  • 10个最佳ES6特性 ES7与ES8的特性
  • Apache Spark Streaming 使用实例
  • co模块的前端实现
  • crontab执行失败的多种原因
  • css的样式优先级
  • Django 博客开发教程 8 - 博客文章详情页
  • ECS应用管理最佳实践
  • HashMap ConcurrentHashMap
  • iOS 颜色设置看我就够了
  • Java 实战开发之spring、logback配置及chrome开发神器(六)
  • JavaScript 无符号位移运算符 三个大于号 的使用方法
  • Java比较器对数组,集合排序
  • Js基础知识(四) - js运行原理与机制
  • oschina
  • Vue UI框架库开发介绍
  • 安卓应用性能调试和优化经验分享
  • 试着探索高并发下的系统架构面貌
  • 一天一个设计模式之JS实现——适配器模式
  • 容器镜像
  • ​iOS实时查看App运行日志
  • ​LeetCode解法汇总518. 零钱兑换 II
  • ​软考-高级-系统架构设计师教程(清华第2版)【第9章 软件可靠性基础知识(P320~344)-思维导图】​
  • # 数论-逆元
  • #pragma pack(1)
  • (003)SlickEdit Unity的补全
  • (26)4.7 字符函数和字符串函数
  • (附源码)springboot电竞专题网站 毕业设计 641314
  • (附源码)ssm教材管理系统 毕业设计 011229
  • (十七)devops持续集成开发——使用jenkins流水线pipeline方式发布一个微服务项目
  • (十三)Java springcloud B2B2C o2o多用户商城 springcloud架构 - SSO单点登录之OAuth2.0 根据token获取用户信息(4)...
  • (一)80c52学习之旅-起始篇
  • (一)Mocha源码阅读: 项目结构及命令行启动
  • (一)python发送HTTP 请求的两种方式(get和post )
  • ./和../以及/和~之间的区别
  • .net framework 4.0中如何 输出 form 的name属性。
  • .Net多线程总结
  • @FeignClient 调用另一个服务的test环境,实际上却调用了另一个环境testone的接口,这其中牵扯到k8s容器外容器内的问题,注册到eureka上的是容器外的旧版本...
  • @hook扩展分析
  • @PreAuthorize注解
  • [ vulhub漏洞复现篇 ] Celery <4.0 Redis未授权访问+Pickle反序列化利用