1. 自 定义 方法,继承TemplateMethodModel即可。
例子如下:
public class IndexOfMethod implements TemplateMethodModel { public TemplateModel exec(List args) throws TemplateModelException { if (args.size() != 2) { throw new TemplateModelException("Wrong arguments"); } return new SimpleNumber(((String) args.get(1)).indexOf((String) args.get(0))); } }
在root中添加以后即可在模板中直接使用:
root.put("indexOf", new IndexOfMethod());
调用 方法如下
<#assign x = "something">
${indexOf("met", x)}
${indexOf("foo", x)}
2. 自 定义 指令,继承TemplateDirectiveModel 即可。
例子如下:
package com.example; import java.io.IOException; import java.io.Writer; import java.util.Map; import freemarker .core.Environment; import freemarker .template.TemplateDirectiveBody; import freemarker .template.TemplateDirectiveModel; import freemarker .template.TemplateException; import freemarker .template.TemplateModel; import freemarker .template.TemplateModelException; /** * FreeMarker user-defined directive that progressively transforms * the output of its nested content to upper-case. * * * <p>Directive info </p> * * <p>Directive parameters: None * <p>Loop variables: None * <p>Directive nested content: Yes */ public class UpperDirective implements TemplateDirectiveModel { public void execute(Environment env, Map params, TemplateModel[] loopVars, TemplateDirectiveBody body) throws TemplateException, IOException { // Check if no parameters were given: if (!params.isEmpty()) { throw new TemplateModelException("This directive doesn't allow parameters."); } if (loopVars.length != 0) { throw new TemplateModelException("This directive doesn't allow loop variables."); } // If there is non-empty nested content: if (body != null) { // Executes the nested body. Same as <#nested> in FTL, except // that we use our own writer instead of the current output writer. body.render(new UpperCaseFilterWriter(env.getOut())); } else { throw new RuntimeException("missing body"); } } /** * A {@link Writer} that transforms the character stream to upper case * and forwards it to another {@link Writer}. */ private static class UpperCaseFilterWriter extends Writer { private final Writer out; UpperCaseFilterWriter (Writer out) { this.out = out; } public void write(char[] cbuf, int off, int len) throws IOException { char[] transformedCbuf = new char[len]; for (int i = 0; i < len; i++) { transformedCbuf[i] = Character.toUpperCase(cbuf[i + off]); } out.write(transformedCbuf); } public void flush() throws IOException { out.flush(); } public void close() throws IOException { out.close(); } } }
在root中添加就可以直接在模板中调用:
root.put("upper", new com.example.UpperDirective());
也可如下方法初始化后也同样可以在模板中调用:
<#assign upper = "com.example.UpperDirective"?new()>
调用方法如下:
<@upper>
bar
<#-- All kind of FTL is allowed here -->
<#list ["red", "green", "blue"] as color>
${color}
</#list>
baaz
</@upper>
相关推荐
一个用FTL定义的非常通用数据分页指令,有源码,有使用示例。使用效果图可以参看本人博客中的相关文章:http://blog.csdn.net/qjyong/archive/2009/10/18/4693142.aspx
B 指令 if, else, elseif 语法 Java代码 <#if condition> ... <#elseif condition2> ... <#elseif condition3> ... ... <#else> ... </#if> ... ... ... ... ... 用例 ...
6、 用户自定义FTL指令:宏和变换器 7、 节点 节点变量表示为树型结构中的一个节点,通常在XML处理中使用。 在模板里对sequences和hashes初始化 sequences 1. [“you”,”me”,”he”] 2. 1..100 3. [ {“Akey...
4.1 自定义指令 ................................................................................................ 46 4.2 在模板中定义变量 ...................................................................
不过由于小弟资历浅薄,也没心思看,主要是strut2的标签本来我就觉得不大习惯,另外上个月接触了freemarker后,实在是用的爽死了,为什么不用freemarker的macro指令写个通用的分页呢?马上想到模仿TX的...
#freemarker demo这是一个介绍freemarker的一些使用方法的demo、目前主要提供了两个freemarker的高级用法:自定义指令及宏
〖主要内容〗包含以下内容,具体以课程目录为准:* 开发环境与API* 基本类型的插值* Hash 与 Sequece类型的插值* 常用的 built-in 用法* 等指令的用法* 自定义函数 Method Variables * 共享变量 Shared ...
4.1 自定义指令 ................................................................................................ 45 4.2 在模板中定义变量 ...................................................................
PublicCMS是一款基于SpringMVC4.2.1,Hibernate5.0.2,FreeMarker2.3.23,hibernate-search5.5.0开发的永久免费开源JAVACMS系统,支持全站静态化,SSI技术,更有多种独创解决方案,FreeMarker自定义指令自动加载,0关联...
4.1 自定义指令 ................................................................................................ 45 4.2 在模板中定义变量 ...................................................................
4.4 如何调用字段和方法 55 4.5 如何访问数组类型的属性 56 4.6 如何访问List类型的属性 56 4.7 如何访问Map类型的属性 57 4.8 JSP EL:当OGNL帮不上忙时 58 4.9 小结 58 第5章表单标签 59 5.1 Struts标签的...
这是一款适合作为毕设选题,养老院使用的系统管理系统,采用了**SpringBoot,VUE,Redis,ElementUI****MySQL**等多种新...同时在权限控制方面有独到的创新,实现了VUE自定义指令,以控制系统权限到每一个系统按钮。
4.4 如何调用字段和方法 55 4.5 如何访问数组类型的属性 56 4.6 如何访问List类型的属性 56 4.7 如何访问Map类型的属性 57 4.8 JSP EL:当OGNL帮不上忙时 58 4.9 小结 58 第5章 表单标签 59 5.1 Struts标签的使用...
第3章jsp和servlet 33 3.1开发第一个jsp+servlet应用 33 3.1.1创建工程 33 3.1.2编写程序 34 3.1.3部署应用 35 3.2认识jsp 36 3.2.1jsp的工作原理 37 3.2.2jsp注释方式 37 3.2.3jsp声明方式 38 3.2.4jsp...