`
qepipnu
  • 浏览: 74594 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

freemarker的模板标签获取

阅读更多
In FreeMarker 2.2, Template has an undocumented method for examining the parsed template: getRootTreeNode 使用freemarker模板引擎进行传统的开发有个固定的模式就是我们知道模板上有哪些标签,然后我们会获取这些标签的数据来进行data+model的组合。但是如果模板上的标签名字或者个数不确定的话,那么我们就需要知道模板上到底有那些标签了。这样做的好处有以下几个方面:

1、我们可以根据模板实际拥有的标签来进行数据获取,避免了将整个系统的标签都穷举一遍,分别查取数据

2、我们可以分析获取到的标签名字,根据标签名字来做逻辑

但是freemarker2.2官方的faq列表的第26项中确是明确的说不想支持这个功能。但是又很猥琐的提出了一个解决方案,就是将模板的各个数据项进行了拆分。提供一个半公开的访问接口。

view plaincopy to clipboardprint?
In FreeMarker 2.2, Template has an undocumented method for examining the parsed template: getRootTreeNode 
In FreeMarker 2.2, Template has an undocumented method for examining the parsed template: getRootTreeNode

通过查看Template的源代码发现,她将那个模板标签封装的是十分严密,对外提供的方法和类都是包内可见,实在是让人难以入手。最后不得不想个歪招将我们要的标签给打印出来了。如下

view plaincopy to clipboardprint?
Template t = getFreeMarkerCFG().getTemplate(templateFileName);   
            //获取所有的标签项  
TemplateElement te=t.getRootTreeNode();  
              
for(Enumeration children = te.children(); children.hasMoreElements();){  
                Object obj=children.nextElement();  
                if("class freemarker.core.DollarVariable".equals(obj.getClass().toString())){  
                    System.out.println(obj.toString());  
                }  




分享到:
评论

相关推荐

    freemarker总结

    该指令用于导入FreeMarker模板中的所有变量,并将该变量放置在指定的Map对象中,import指令的语法格式如下: 上面的代码将导入/lib/common.ftl模板文件中的所有变量,将这些变量放置在一个名为com的Map对象中. 创建...

    超完整FreeMarker中文教程,代码

    什么是FreeMarker? ................................................................................................. 7 我们应该阅读什么内容? .............................................................

    使用freemarker生成word文档,源代码+jar包+说明文档及注意事项

    //获取模板 Template template = configuration.getTemplate(templateName); //输出文件 File outFile = new File(filePath+File.separator+fileName); //如果输出目标文件夹不存在,则创建 if (!outFile...

    HTML5-Ajax-Freemarker:通过HTML表示静态页面,Ajax和Freemarker做数据交互的一个动态小demo

    第二个freemarker是通过freemarker作为模板技术,先手写ftl文件作为模板,其中有数据交互的地方加上标签内容,然后通过java文件获取数据源(对象模型),同时通过FreemarkerUtil生成html文件,需要指定生成目录,...

    FreeMarker 手册

    FreeMarker 手册 .......................................................................................................... 1 用于 FreeMarker 2.3.18 .......................................................

    前端HTML模板解析引擎domTemplate.js.zip

    美工设计好静态HTML文件,交给后端工程师,需要转换成Jsp、Freemarker、Velocity等动态模板文件。这种模式有几个缺点 1、动态模板文件不能被浏览器解释、必须要运行在服务器中才能显示出效果 2、动态效果和静态...

    ExpordWord_demo.zip

    java通过freemarker导出包含富文本图片的word...剩下的就是后台操作了,找到你存富文本的字段(html代码)获取里面的img标签,找到图片,并把图片解析为base64字符串,填充到我们只做的模板上就ok了,大体思路就这样了

    微信小程序-小程序商店

    Zblog a java blog 核心功能 文章/页面发布、分类、统计阅读次数。 提供文章形式的RSS聚合。...视图模板 Jsp/Jstl/JspTaglib 其它 Jsoup(xss过滤)、fastjson、IKAnalyzer 前端 jQuery js框架 Bootstrap 后台

    cms后台管理

    //获取的是参数PARAM_TPL,是否调用模板以及调用的模板类型 InvokeType type = DirectiveUtils.getInvokeType(params); //获取传入参数,列表样式,根据不同的参数获取不同的样式列表 String listStyle = ...

    MRCMS内容管理系统-其他

    采用 freemarker 作为模板引擎,所以你可以在模板中写 freemarker 标签。 采用内容模型和插件支持,提高系统扩展性。 采用主流加密技术,保证站点后台安全性。 提供网站碎片功能,在模板中直接获取碎片内容。 支持 ...

    Struts2入门教程(全新完整版)

    处理FreeMarker模板 16 org.apache.struts2.views.freemarker.FreemarkerResult 16 httpheader 16 控制特殊http行为的结果类型 16 org.apache.struts2.dispatcher.HttpHeaderResult 16 stream 16 向浏览器发送...

    jeecms v9.3 正式版 源码包.zip

    8、公众号推送菜单和群发微信菜单获取微信端消息返回处理 9、OSS管理添加appkey_secretId后台未解密导致数据存储错误 10、会员中心留言列表报错 11、工作流节点空值处理 12、手机模板在静态页生成的情况下...

    Jspxcms网站内容管理系统 源码包 v9.0.0.zip

    Jspxcms是基于Java、JSP技术开发的国产开源CMS,是制作、维护网站的利器。...Jspxcms致力于做最好的...Freemarker模板技术;仿Gmail验证码等。 Jspxcms网站内容管理系统页面截图展示  相关阅读 同类推荐:CMS系统

    SpringBoot开发非常美观的java博客系统(包含后台管理功能)

    视图模板 Freemarker 其它 Jsoup、fastjson jQuery、Seajs Bootstrap 前端框架 UEditor/Markdown编辑器 font-Awesome 字体/图标 准备工作(sql文件在项目里面) 安装 Jdk8 安装 Maven 准备 IDE (如果你不看源码,...

    spring in action英文版

     7.1 从JNDI中获取对象  7.1.1 使用传统的JNDI  7.1.2 代理JNDI对象  7.2 发送电子邮件  7.3 调度任务  7.3.1 使用Java Timer调度任务  7.3.2 使用Quartz调度器  7.3.3 按调度计划调用方法 ...

    Struts2属性文件详解

    该属性还允许使用ftl、vm或jsp,分别对应FreeMarker、Velocity和JSP模板. struts.configuration.xml.reload 该属性设置当struts.xml文件改变后,系统是否自动重新加载该文件.该属性的默认值是false. struts.velocity....

    Spring 2.0 开发参考手册

    5.4.1. 设置和获取属性值以及嵌套属性 5.4.2. 内建的PropertyEditor实现 6. 使用Spring进行面向切面编程(AOP) 6.1. 简介 6.1.1. AOP概念 6.1.2. Spring AOP的功能和目标 6.1.3. Spring的AOP代理 6.2. @...

    Spring中文帮助文档

    14.4. Velocity和FreeMarker 14.4.1. 需要的资源 14.4.2. Context 配置 14.4.3. 创建模板 14.4.4. 高级配置 14.4.5. 绑定支持和表单处理 14.5. XSLT 14.5.1. 写在段首 14.5.2. 小结 14.6. 文档视图(PDF/...

    Spring API

    14.4. Velocity和FreeMarker 14.4.1. 需要的资源 14.4.2. Context 配置 14.4.3. 创建模板 14.4.4. 高级配置 14.4.5. 绑定支持和表单处理 14.5. XSLT 14.5.1. 写在段首 14.5.2. 小结 14.6. 文档视图(PDF/...

    SpringMVC-Mybatis-Shiro-redis-master 权限集成缓存中实例

    解决方案:在 FreeMarkerViewExtend.java 33行处 增加了BasePath ,通过BasePath 来控制请求目录,在 Freemarker 中可以自由使用,而 JSP 中是直接在 JSP 中获取BasePath 使用。 解决后遗症:因为我们的权限是通过...

Global site tag (gtag.js) - Google Analytics