`
cuiyadll
  • 浏览: 204940 次
文章分类
社区版块
存档分类
最新评论

Freemarker 调用Java静态方法

阅读更多

Accessing static methods

 

The TemplateHashModel returned from BeansWrapper.getStaticModels() can be used to create hash models for accessing static methods and fields of an arbitrary class.

 

BeansWrapper wrapper = BeansWrapper.getDefaultInstance();
TemplateHashModel staticModels = wrapper.getStaticModels();
TemplateHashModel fileStatics =
    (TemplateHashModel) staticModels.get("java.io.File"); 

And you will get a template hash model that exposes all static methods and static fields (both final and non-final) of the Java.lang.System class as hash keys. Suppose that you put the previous model in your root model:

 

root.put("File", fileStatics); 

From now on, you can use ${File.SEPARATOR} to insert the file separator character into your template, or you can even list all roots of your file system by:

<#list File.listRoots() as fileSystemRoot>...</#list> 

Of course, you must be aware of the potential security issues this model brings.

You can even give the template authors complete freedom over which classes' static methods they use by placing the static models hash into your template root model with

 

root.put("statics", BeansWrapper.getDefaultInstance().getStaticModels()); 

This object exposes just about any class' static methods if it's used as a hash with class name as the key. You can then use expression like ${statics["java.lang.System"].currentTimeMillis()} in your template. Note, however that this has even more security implications, as someone could even invoke System.exit() using this model if the method exposure level is weakened to EXPOSE_ALL.

Note that in above examples, we always use the default BeansWrapper instance. This is a convenient static wrapper instance that you can use in most cases. You are also free to create your own BeansWrapper instances and use them instead especially when you want to modify some of its characteristics (like model caching, security level, or the null model representation).

 

Demo:

 

[java] view plain copy
 
  1.   // 指定要在ftl页面使用的静态包名  
  2.   public static TemplateHashModel useStaticPackage(String packageName)  
  3.   {  
  4.     try  
  5.     {  
  6.       BeansWrapper wrapper = BeansWrapper.getDefaultInstance();  
  7.       TemplateHashModel staticModels = wrapper.getStaticModels();  
  8.       TemplateHashModel fileStatics = (TemplateHashModel) staticModels.get(packageName);  
  9.       return fileStatics;  
  10.     }  
  11.     catch (Exception e)  
  12.     {  
  13.        e.printStackTrace();    
  14.     }  
  15.   }  
  16.   
  17. // 调用处  
  18.   
  19. //data.put("list", list);  
  20. data.put("Helper",useStaticPackage("com.test.Helper"));  
  21.   
  22. // ftl 页面  
  23. ${Helper.method()}  

 

 
 
分享到:
评论

相关推荐

    freemarker把jsp静态化简单应用

    本教程将介绍如何在Java Web项目中利用FreeMarker进行JSP页面的静态化,适合初学者入门学习。 1. **FreeMarker基本概念** FreeMarker是一个基于模板的语言,它与编程语言不同,不包含任何控制结构或函数调用。它的...

    使用FreeMarker生成Html静态文件

    4. **模板加载与渲染**: 使用`Configuration`对象加载模板文件,然后调用`Template`对象的`process`方法,传入数据模型和输出流,将模板渲染为HTML。例如: ```java Template template = config.getTemplate(...

    jsp 静态引擎(freemarker)生成静态html案例

    4.freemarker 不能直接调用java对象的method. 这点有些人认为这是个缺点,但是我不这样认为. 个人觉得对于一个view层的东西来说,你要做的就是把view展现好就行了,不要再view中调用业务方法. 以前在公司做产品和后来做...

    freemarker生成静态html示例

    5. **函数和方法调用**:Freemarker允许调用Java对象的方法,例如 `${user.getFullName()}`。 6. **注释**:使用`&lt;!--#comment--&gt;`来添加注释,这在开发过程中非常有用。 7. **文本格式化**:Freemarker提供了`...

    java使用freemarker模板技术导出word

    Java 使用 FreeMarker 模板技术导出 Word 是一种常见的数据动态生成文档的方法,它结合了 Java 的编程能力和 FreeMarker 模板引擎的强大功能,能够帮助开发者高效地生成结构化的 Word 文档。FreeMarker 是一个开源的...

    Freemarker网站静态化的实现实例源码(eclipse)

    本实例源码是关于如何利用Freemarker进行网站静态化的具体实践,主要涉及到以下几个核心知识点: 1. **Freemarker模板语言**:Freemarker使用简单的文本模板语言,将数据模型与HTML模板结合,生成最终的HTML页面。...

    freemarker java模板技术 很详细的注释

    - **模板**: 模板是Freemarker的核心,它是HTML或其他文本格式的静态部分,其中包含了一些特殊的Freemarker指令,用于在运行时与Java数据模型交互。 - **数据模型**: Java应用程序会创建一个数据模型,将数据传递...

    教你如何用FreeMarker生成静态页面.doc

    3. 定义一个静态方法`analysisTemplate`,接收模板路径、模板文件名、目标文件名以及数据模型Map作为参数。 4. 初始化`Configuration`对象,这是FreeMarker的核心配置类,用于管理模板的加载和解析。 5. 使用`...

    FreeMarker教你如何生成html静态页面源码

    FreeMarker提供了丰富的语法和功能,如条件判断、循环、函数调用等,可以满足复杂的页面逻辑。同时,FreeMarker有良好的错误处理机制,方便调试模板错误。 7. **部署和维护**:生成的静态HTML页面可以部署到Web...

    通过freemarker模板 生成PDF

    `PDFTool`可能包含使用Freemarker的方法,如`processTemplate()`,此方法接受模板文件路径、数据模型和目标PDF输出路径作为参数。`FileController`则可能是处理HTTP请求的控制器,它接收一个HTML URL,并调用`PDF...

    json、post请求、freemarker模拟生成sql、wsdl2Java生成客户代码

    例如,运行`wsdl2java`命令并指定WSDL文件路径,就能自动生成相应的Java源码,然后编译这些源码,就可以在Java应用中直接调用Web服务了。 以上四个知识点涵盖了Java开发中数据交换、网络通信、动态内容生成和Web...

    用java代码生成静态页面

    接下来调用`createNewFile()`方法来真正地在指定位置创建文件: ```java f.createNewFile(); ``` 如果文件已存在,则该方法将返回`false`;如果成功创建了新文件,则返回`true`。需要注意的是,如果文件所在的目录不...

    FreeMarker通用的分页

    - **参数传递**:宏之间以及宏与外部调用者之间的参数传递是实现动态分页的关键,确保了代码的灵活性和可维护性。 ### 总结 在FreeMarker中实现通用的分页功能,不仅提升了Web应用程序的性能,还极大地改善了用户...

    freemarker入门代码

    - **模板(Template)**:Freemarker的工作基于模板,模板是纯文本文件,其中包含静态文本和Freemarker指令。这些指令用于插入由应用程序提供的数据。 - **数据模型(Data Model)**:数据模型是应用程序传递给...

    springMVC+freemarker框架

    FreeMarker是Java的开源模板语言,用于生成HTML、XML等静态或动态文档。它与后端Java代码分离,使得设计师可以专注于页面布局,而开发者则关注业务逻辑。FreeMarker的主要特点包括: 1. **模板语法**:FreeMarker...

    java解决网站静态页面生成方案(源码)

    6. **线程安全**: 由于Servlet可能被多个线程同时调用,源码需要考虑线程安全问题,以避免在生成或更新静态页面时发生冲突。 7. **异步处理**: 为了不阻塞其他请求,`CreatorHtmlServlet`可能会使用异步处理或者...

    网站生成静态页面的方案和工具

    总结,网站生成静态页面是一个有效的优化手段,通过选用合适的工具和方法,结合FreeMarker模板引擎,能够实现高效且定制化的静态化过程。无论是个人博客还是大型企业网站,都可以从中受益,提升网站性能,增强用户...

    Freemarker开发文档以及技术手册资源

    这份文档通常会详细阐述Freemarker的语法特性、模板设计原则、API使用方法以及最佳实践。其中,你将了解到: 1. **基本语法**:Freemarker的模板语言(FTL)包括变量表达式、控制结构(如if/else、for循环)、函数...

    freemarker 简单项目示例

    - 将数据模型与模板结合,调用`Template`对象的`process`方法生成HTML字符串。 6. **生成静态HTML** - 渲染后的HTML字符串可以写入到文件系统,形成静态HTML文件。 - 这一步通常在Web服务器启动时或用户请求后...

    freemarker

    总结来说,FreeMarker是Java Web开发中用于生成静态页面的重要工具,通过与Struts2、Spring、Hibernate等框架集成,可以实现高效、灵活的视图层渲染,并且有利于网站性能优化。在实际项目中,静态化策略可以显著提升...

Global site tag (gtag.js) - Google Analytics