springmvc整合freemarker怎么弄

 我来答
地瓜说机
推荐于2016-11-18 · TA获得超过2.9万个赞
知道大有可为答主
回答量:2.3万
采纳率:91%
帮助的人:1.2亿
展开全部
一、 用macro实现自定义指令,例如:

自定义指令可以使用macro指令来定义。
<#macro greet person>
<font size="+2">Hello ${person}!</font>
</#macro>
macro指令自身不打印任何内容,它只是用来创建宏变量,所以就会有一个名为greet的变量。
使用这个宏:
<@greet person="Fred"/>
会打印出:
<font size="+2">Hello Fred!</font>
二、用java代码标签实现自定义指令:

可以使用TemplateDirectiveModel接口在Java代码中实现自定义指令。
简单示例如下:
1、实现TemplateDirectiveModel接口。
public class UpperDirective implements TemplateDirectiveModel {
public void execute(Environment env,
Map params, TemplateModel[] loopVars,
TemplateDirectiveBody body)
throws TemplateException, IOException {
if (!params.isEmpty()) {
throw new TemplateModelException(
"parameters 此处没有值!");
}
if (loopVars.length != 0) {
throw new TemplateModelException(
" variables 此处没有值!");
}
if (body != null) {
//执行nested body 与FTL中 <#nested> 类似。
body.render(new UpperCaseFilterWriter(env.getOut()));
} else {
throw new RuntimeException("missing body");
}
}
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();
}
}
}

说明:<#nested>指令执行位于开始和结束标记指令之间的模板代码段。

2、注入FreeMarkerConfigurer的freemarkerVariables中。
例如:在jeecms-servlet-front.xml
<entry key="upper" value-ref="upper"/>
<bean id="upper" class="com.example.UpperDirective" />

说明:
FreeMarkerConfigurer. 、setFreemarkerVariables(Map<String,Object> variables)
底层调用了FreeMarker的Configuration.setAllSharedVariables()方法。
因为更好的实践是将常用的指令作为共享变量放到Configuration中。

3、调用自定义指令:

[@upper]
bar
[#list ["red", "green", "blue"] as color]
${color}
[/#list]
baaz
[/@upper]
4、显示输出结果:
BAR RED GREEN BLUE BAAZ
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式