Meoo

[Freemarker] freemarker自定义指令

内容 笔者学习自定义指令的笔记 freemarker自定义指令与JSP的标签库类似 自定义指令

内容

笔者学习自定义指令的笔记


freemarker自定义指令 与 JSP的标签库 类似

自定义指令

<@指令名 key1=value1 key2=value2; result1,result2>



</@指令名>

入参:key,value键值对形式传入,入参之间用空格隔开


出参:可多个,出参变量名之间用,间隔

使用

例:在flt里传入 用户名userName 与 要验证的权限admin


后台验证是否有admin权限,结果存于result1


后台取出该用户其他权限,结果存于result2

Spring配置文件中配置自定义指令


在spring配置文件的property标签配置


key为标签名


value-ref为相应的bean,配置bean的方法:①spring配置文件中配置bean②注解方式

<property name="freemarkerVariables">

<map>

<entry key="role" value-ref="roleDirectiveModel"/>

</map>

</property>

编写处理该指令的bean类


env环境变量


params:指令的入参,params.get(key)用key取value


loopVars:指令的出参,为一个数组形式


body:指令内容


除params外,其他的都能null


注意:


①获得入参时都有TemplateScalarModel类型,要用时需调用相应方法转换成Java类型


②写入出参loopVars时需写入freemarker的类型TemplateModel

@Service //bean注解

public class RoleDirectiveModel implements TemplateDirectiveModel {

@Override

//处理逻辑的函数

public void execute(Enviroment env,Map params,TemplateModel[] loopVars,TemplateDirectiveBody body) throws TemplateException,IOException {

//取两个入参

TemplateScalarModel user = (TemplateScalarModel)params.get("user");

TemplateScalarModel role = (TemplateScalarModel)params.get("role);

//模拟数据库操作,查看该用户的权限是否为admin

if ("userName".equals(user.getAsString()) && "admin".equals(role.getAsString()) ) {

//是;给第一个返回值赋值true

loopVars[0] = TemplateBooleanModel.TRUE;

}

//模拟数据库,取出该用户其他权限

List<String> otherRights = new ArrayList<String>();

otherRights.add("add");

otherRights.add("delete");

//给出参赋值

loopVars[1] = new SimpleSequence(otherRights);

//把结果输出到flt页面中

body.render(env.getOut() );

}

}

flt中使用指令


传入用户名 与 要验证的权限;返回结果到result1,result2


result1返回 是否拥有该权限


result2返回 该用户其他权限


对结果进行反馈

<@role user="userName" role="admin";result1,result2>

<#if result1> <#-- 如果userName的权限是admin,则result1的值为true-->

我的角色是admin<br/>

</#if>

我拥有的权限是:

<#list reulst2 as item>

@{item},

</#list>

</@role>

阅读全文

版权声明:本文为博主原创文章,未经博主允许不得转载。

本文已收录于以下专栏:

相关文章推荐

freemarker自定义指令及方法

“一节复一节,千枝攒万叶”竹子每生长一段就会总结一下打个节,今天我也总结一下最近处理的一个小问题,希望我的小节,对各位看官有所帮助。

背景描述:

最近项目做了一个月报功能,由于生产环境不是所有人都能访...

[Freemarker] freemarker自定义指令

suijiarui

2016年05月12日 14:30

3776

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

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

[Freemarker] freemarker自定义指令

jadyer

2012年06月12日 11:01

3906

freemarker自定义指令

指令方法Freemarker中自定义指令需要实现TemplateDirectiveModel接口,并实现execute方法//使用注解方式,这里也可以使用spring的bean的方式

@Ser...

[Freemarker] freemarker自定义指令

wqh8522

2017年06月04日 12:04

167

Freemarker自定義指令

Freemarker自定義指令

1.首先需寫一個方法實現TempletedirectiveModel接口。然後重寫裏面的方法

2.在測試類中写明调用方式:Map root= new HashMap()...

[Freemarker] freemarker自定义指令

mingyunzhidian

2012年07月10日 10:08

568

FreeMarker 自定义指令(三)

1. 模板文件 test04.ftlfoo

bar f

${color}

baaz

wombat2. 自定义指令类 UpperDire...

[Freemarker] freemarker自定义指令

hanshileiai

2015年07月13日 11:20

2257

【FreeMarker】【模板文件FTL】模板自定义指令 macro

自定义指令macro

自定义指令可以使用 macro

指令来定义,这是模板设计者所关心的内容。Java程序员若不想在模板中实现定义指令,而是在Java语言中实现指令的定义,这时可以使用freem...

[Freemarker] freemarker自定义指令

robinjwong

2014年10月24日 15:47

6729

Freemarker使用之自定义指令

macro,nested,return指令

macro可以用于实现自定义指令,通过使用自定义指令,可以将一段模板片段定义成一个用户指令,使用macro指令的语法格式如下:

...

[Freemarker] freemarker自定义指令

u012172536

2016年05月29日 14:54

508

freeMarker自定义指令

欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:

Markdown和扩展Markdown简洁的语法

代码块高亮

图片链接和...

[Freemarker] freemarker自定义指令

qq1090340171

2017年07月13日 12:55

110

FreeMarker 自定义指令,并增加参数(四)

1. 模板文件 test05.ftl

Test ${x}

Test

${cnt}. Test

2. 自定义指令类(带参数)RepeatD...

[Freemarker] freemarker自定义指令

hanshileiai

2015年07月13日 12:35

3744

Freemarker自定义指令

场景在做一个CMS网站时,要列出网站栏目,比如有新闻,科技,体育,财经等栏目。栏目内容存放在数据库中。调用语法 //没有循环变量

...

[Freemarker] freemarker自定义指令

csujiangyu

2015年11月18日 15:56

3886

0

上一篇:

:下一篇

精彩评论

暂无评论...
验证码 换一张
取 消

热门标签