- 浏览: 941827 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (385)
- 搜索引擎学习 (62)
- 算法 (1)
- 数据库 (15)
- web开发 (38)
- solr开发 (17)
- nutch 1.2 系统学习 (8)
- cms (1)
- 系统架构 (11)
- linux 与 unix 编程 (16)
- android (15)
- maven (1)
- 关注物流 (1)
- 网址收集 (1)
- 分布式,集群 (1)
- mysql (5)
- apache (1)
- 资料文档备份 (7)
- 上班有感 (0)
- 工作流 (15)
- javascript (1)
- weblogic (1)
- eclipse 集成 (1)
- JMS (7)
- Hibernate (1)
- 性能测试 (1)
- spring (6)
- 缓存cache (1)
- mongodb (2)
- webservice (1)
- HTML5 COCOS2D-HTML5 (1)
- BrowserQuest (2)
最新评论
-
avi9111:
内陷到android, ios, winphone里面也是随便 ...
【HTML5游戏开发】二次开发 BrowserQuest 第一集 -
avi9111:
呵呵,做不下去了吧,没有第二集了吧,游戏是个深坑,谨慎进入,其 ...
【HTML5游戏开发】二次开发 BrowserQuest 第一集 -
excaliburace:
方案3亲测完全可用,顺便解决了我其他方面的一些疑问,非常感谢
spring security 2添加用户验证码 -
yuanliangding:
Spring太强大了。
Spring Data JPA 简单介绍 -
小高你好:
什么是hibernate懒加载?什么时候用懒加载?为什么要用懒加载?
-
博客分类:
- Freemarker
FreeMarker 2.3.11版本以后提供了新的自定义标签接口TemplateDirectiveModel 以替代TemplateTransformModel ,
下面是一个转换自定义标签的内容体中字母为大写字母的例子:
- 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 自定义指令,用于转换指令内容体中的字母为大写字母。
- *
- */
- 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(
- "This directive doesn't allow parameters." );
- }
- // 禁用循环变量
- /*
- * 循环变量
- 用户定义指令可以有循环变量,通常用于重复嵌套内容,基本用法是:作为nested指令的参数传递循环变量的实际值,而在调用用户定义指令时,在${"<@…>"}开始标记的参数后面指定循环变量的名字
- 例子:
- <#macro repeat count>
- <#list 1..count as x>
- <#nested x, x/2, x==count>
- </#list>
- </#macro>
- <@repeat count=4 ; c, halfc, last>
- ${c}. ${halfc}<#if last> Last!</#if>
- </@repeat>
- */
- if (loopVars.length != 0 ) {
- throw new TemplateModelException(
- "This directive doesn't allow loop variables." );
- }
- // 指令内容体不为空
- 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" );
- }
- }
- /**
- * 输出流的包装器(转换大写字母)
- */
- 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();
- }
- }
- }
- import java.io.File;
- import java.io.IOException;
- import java.io.Writer;
- import java.util.Map;
- import freemarker.template.Configuration;
- import freemarker.template.DefaultObjectWrapper;
- import freemarker.template.Template;
- import freemarker.template.TemplateException;
- /**
- *
- * 模板工具类
- */
- public class FreeMarkertUtil {
- /**
- * @param templatePath 模板文件存放目录
- * @param templateName 模板文件名称
- * @param root 数据模型根对象
- * @param templateEncoding 模板文件的编码方式
- * @param out 输出流
- */
- public static void processTemplate(String templatePath, String templateName, String templateEncoding, Map<?,?> root, Writer out){
- try {
- Configuration config=new Configuration();
- File file=new File(templatePath);
- //设置要解析的模板所在的目录,并加载模板文件
- config.setDirectoryForTemplateLoading(file);
- //设置包装器,并将对象包装为数据模型
- config.setObjectWrapper(new DefaultObjectWrapper());
- //获取模板,并设置编码方式,这个编码必须要与页面中的编码格式一致
- Template template=config.getTemplate(templateName,templateEncoding);
- //合并数据模型与模板
- template.process(root, out);
- out.flush();
- out.close();
- } catch (IOException e) {
- e.printStackTrace();
- }catch (TemplateException e) {
- e.printStackTrace();
- }
- }
- }
- import java.io.OutputStreamWriter;
- import java.util.HashMap;
- import java.util.Map;
- /**
- *
- * 客户端测试模板输入类
- */
- public class ClientTest {
- public static void main(String[] args) {
- Map<String,Object> root=new HashMap<String, Object>();
- root.put("upper" , new UpperDirective());
- FreeMarkertUtil.processTemplate("src/templates" , "demo01.ftl" , "UTF-8" , root, new OutputStreamWriter(System.out));
- }
- }
模板文件demo01.ftl如下:
- < @upper >
- bar
- <#-- All kind of FTL is allowed here -->
- <#list ["red" , "green" , "blue" ] as color>
- ${color}
- </#list>
- baaz
- </@upper >
发表评论
-
最新上线的小站 格格衣柜
2012-12-13 18:43 13格格衣柜,www.gegeyigui.com,有兴趣可以去看看 ... -
fck 相关处理
2012-12-10 18:11 1004javascript获取和设置FCKeditor内容 ... -
【转】Java版DBHelper【简单】(MySQL数据库)
2012-06-18 17:47 14581、测试数据库 1.1 数据库数据 ... -
【转】细细品味Web——Json-Lib类库使用手册
2012-06-18 17:46 14461、JsonLib简介 Json ... -
freemarker 自定义标签问题
2012-05-05 10:47 1135倒腾半天,发现是使用标签时,出错了。[@cms_taobaok ... -
【转】freemarker中实现自定义标签(包含处理参数以及循环变量)(2.3.11版本以后的方式)
2012-05-04 14:34 2482博客分类: ... -
Spring Data JPA 简单介绍
2011-08-26 14:11 15768背景 考虑到公司应用中数据库访问的多 ... -
ajax 乱码
2011-07-26 14:24 1054// 异步通过订单获得订单明细,用于商品价格修改 @ ... -
freemarker 格式化
2011-07-05 14:06 3002freemarker数据格式化问题(即数值超过四位数时有逗号) ... -
object references an unsaved transient instance - save the transient instanc
2011-01-17 18:09 6355出现这个错误的原因是在保存该对象前,发现该对象包含有其他空的对 ... -
防止浏览器缓存css,js静态文件[转]
2011-01-11 16:58 2199什么情况下,要禁止静态文件缓存: 1、经常可能要改动的 js ... -
java 开源cms opencms的使用,如何去掉两个/opemcms路径的方法
2010-07-15 21:00 4615哈哈。。。经过本人测试成功: 买空间的朋友,因为无法配 ... -
通过百度获取天气预报[转]
2010-05-06 15:26 1427public class Getweather { ... -
javascript 跳转新发现 window.open 乱码处理
2010-04-09 20:57 14019搞了两三天的乱码处理,试了很多方法,过滤器啊,编码转换啊,试来 ... -
解决 连接关闭问题
2010-03-12 09:57 1356root cause org.springframewor ... -
远程登录不了em
2009-12-18 10:25 1081修改一下hostlist.ini列表就行了。 -
今天发现
2009-12-08 20:49 1085今天搞了半天jstl不显示 感觉太奇怪了,平时框架也没有问题啊 ... -
java 开发中 java的System.getProperty()方法可以获取的值
2009-11-13 16:54 1359java.version Java ... -
什么是hibernate懒加载?什么时候用懒加载?为什么要用懒加载?
2009-11-09 22:05 43462所谓懒加载(lazy)就是延时加载,延迟加载。 什么时候用懒 ... -
SVN在linux下的安装 学习
2009-11-09 17:56 1211SVN在linux下的安装 ...
相关推荐
NULL 博文链接:https://zhenghuazhi.iteye.com/blog/1923544
里面 集合了 一个 简单的 Freemarker demo 代码 和一个 freemarker 自定义标签代码
spring mvc freemarker 自定义标签demo spring mvc 通过自定义的标签在jsp页面调用,初学,记录下做个备忘
在jfinal的基础上,实现freemarker自定义标签的自动扫描和注册,本资源包不含jfinal框架,需在已有框架的基础上添加包中的代码,如需jfinal框架请自行到官网下载
一个用FTL定义的非常通用数据分页指令,有源码,有使用示例。使用效果图可以参看本人博客中的相关文章:http://blog.csdn.net/qjyong/archive/2009/10/18/4693142.aspx
Freemarker简介及标签详解大全 Freemarker简介及标签使用说明
NULL 博文链接:https://asialee.iteye.com/blog/2062313
freemarker实现一行两列算法
freemarker的shiro标签
NULL 博文链接:https://renxin-327666062-qq-com.iteye.com/blog/1532731
freemarker实现自动补...通过ftl模版文件(ftl文件为freemarker模版文件)的自定义标签实现自动补齐字符串。代码稍作修改便可左补齐右补齐左右补齐,可自定义设置补齐的字符串。测试通过java文件调用ftl文件显示结果。
访问freemarker标签大全:http://www.web-tag.net/all_16.htm freemarker 标签大全 freemarker 标签大全
众所周知,struts2宣称freemarker模板中不再支持自定义标签,但如果工程UI仅用freemarker模板可以通过扩展struts标签简单实现,不是采用官方不推荐的配置JspSupportServlet实现的!内付详细说明及范例,此方法仅为团队...
标签:freemarker、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
freemarker
FreeMarker中文文档.pdf FreeMarker入门必修
FreeMarker标签使用FreeMarker标签使用FreeMarker标签使用FreeMarker标签使用
使用Spring boot + FreeMarker 实现代码生成功能,完整案例可以查看 eladmin 项目,教程地址: https://www.ydyno.com/archives/1177.html
freemarker中文API手册
标签:freemarker、jar包、java、中文文档; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。