package com.eagles.directive;
import java.io.IOException;
import java.io.Writer;
import java.util.Iterator;
import java.util.Map;
import freemarker.core.Environment;
import freemarker.template.SimpleNumber;
import freemarker.template.TemplateBooleanModel;
import freemarker.template.TemplateDirectiveBody;
import freemarker.template.TemplateDirectiveModel;
import freemarker.template.TemplateException;
import freemarker.template.TemplateModel;
import freemarker.template.TemplateModelException;
import freemarker.template.TemplateNumberModel;
/**
* FreeMarker 自定义标签实现重复输出内容体。
*
*
* 参数:
* count: 重复的次数,必须的且非负整数。
* hr: 设置是否输出HTML标签 "hr" 元素. Boolean. 可选的默认为fals.
*
*
* 循环变量: 只有一个,可选的. 从1开始。
*
*
*/
public class RepeatDirective implements TemplateDirectiveModel {
private static final String PARAM_NAME_COUNT = "count1";
private static final String PARAM_NAME_HR = "hr";
public void execute(Environment env, Map params, TemplateModel[] loopVars,
TemplateDirectiveBody body) throws TemplateException, IOException {
// 处理参数
int countParam = 0;
boolean countParamSet = false;
boolean hrParam = false;
Iterator paramIter = params.entrySet().iterator();
while (paramIter.hasNext()) {
Map.Entry ent = (Map.Entry) paramIter.next();
String paramName = (String) ent.getKey();
TemplateModel paramValue = (TemplateModel) ent.getValue();
if (paramName.equals(PARAM_NAME_COUNT)) {
if (!(paramValue instanceof TemplateNumberModel)) {
throw new TemplateModelException("The \"" + PARAM_NAME_HR
+ "\" parameter " + "must be a number.");
}
countParam = ((TemplateNumberModel) paramValue).getAsNumber()
.intValue();
countParamSet = true;
if (countParam < 0) {
throw new TemplateModelException("The \"" + PARAM_NAME_HR + "\" parameter " + "can't be negative.");
}
} else if (paramName.equals(PARAM_NAME_HR)) {
if (!(paramValue instanceof TemplateBooleanModel)) {
throw new TemplateModelException("The \"" + PARAM_NAME_HR
+ "\" parameter " + "must be a boolean.");
}
hrParam = ((TemplateBooleanModel) paramValue).getAsBoolean(); } else {
throw new TemplateModelException("Unsupported parameter: "
+ paramName);
}
}
if (!countParamSet) {
throw new TemplateModelException("The required \""
+ PARAM_NAME_COUNT + "\" paramter" + "is missing.");
}
if (loopVars.length > 1) {
throw new TemplateModelException(
"At most one loop variable is allowed.");
}
// Yeah, it was long and boring...
// ---------------------------------------------------------------------
// 真正开始处理输出内容
Writer out = env.getOut();
if (body != null) {
for (int i = 0; i < countParam; i++) {
// 输出 <hr> 如果 参数hr 设置为true
if (hrParam && i != 0) {
out.write("<hr>");
}
// 设置循环变量
if (loopVars.length > 0) {
loopVars[0] = new SimpleNumber(i + 1);
}
// 执行标签内容(same as <#nested> in FTL).
body.render(env.getOut());
}
}
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
Freemarker 自定义标签 简单案例
共34个文件
class:9个
java:9个
xml:3个
5星 · 超过95%的资源 需积分: 50 21 下载量 169 浏览量
2012-11-01
17:42:14
上传
评论
收藏 843KB RAR 举报
温馨提示
里面 集合了 一个 简单的 Freemarker demo 代码 和一个 freemarker 自定义标签代码
资源推荐
资源详情
资源评论
收起资源包目录
TestFreemarkerDiy.rar (34个子文件)
TestFreemarkerDiy
.project 1KB
.mymetadata 324B
src
struts.xml 0B
com
eagles
study
SingletonMain.java 335B
LoginSingleton.java 2KB
TestStream.java 714B
util
FreeMarkertUtil.java 2KB
test
RepeatTest.java 624B
FreemarkerEngin.java 2KB
directive
RepeatDirective.java 4KB
bean
Client.java 513B
Address.java 515B
WebRoot
WEB-INF
classes
struts.xml 0B
com
eagles
study
TestStream.class 1KB
LoginSingleton.class 2KB
SingletonMain.class 858B
util
FreeMarkertUtil.class 2KB
test
FreemarkerEngin.class 2KB
RepeatTest.class 1KB
directive
RepeatDirective.class 3KB
bean
Address.class 904B
Client.class 957B
lib
freemarker-2.3.19.jar 909KB
web.xml 381B
template
index.jsp 834B
test.ftl 2KB
repeat.ftl 214B
test.text 22B
index.jsp 3KB
test2.texxt 15B
META-INF
MANIFEST.MF 39B
.myeclipse
.settings
com.genuitec.eclipse.ws.prefs 109B
org.eclipse.jdt.core.prefs 330B
.classpath 442B
共 34 条
- 1
资源评论
- dngoryaner2016-04-14不错的学习资讯
邻居出行
- 粉丝: 1
- 资源: 7
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功