`
ayufox
  • 浏览: 276186 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

在FreeMarker3.8-版本中实现FreeMarker3.8+的!功能

阅读更多
       FreeMarker3.8中引入了一个非常实用的!功能,在FreeMarker3.8-中,如果要显示类似${user.phone.areacode}的值,需要层层判断是否为NULL,譬如如上的表达式一般在FTL中需要写成<#if user?exists><#if user.phone?exists><#if user.phone.areacode?exists>${user.phone.areacode}},不胜烦琐,而在FreeMarker3.8中可以使用${(user.phone.areacode)!}达到同样的目的。那么如果使用的是FreeMarker3.8-,有什么可选的替代方案呢?下面是我想的一种解决方案

java 代码
 
  1. /** 
  2.  * @author Ray (ayufox@gmail.com) 
  3.  */  
  4. public class EmptyTemplateHashModel implements TemplateHashModel, TemplateScalarModel  
  5. {  
  6.     public final static EmptyTemplateHashModel INSTANCE = new EmptyTemplateHashModel();  
  7.   
  8.     public TemplateModel get(String n) throws TemplateModelException  
  9.     {  
  10.         return INSTANCE;  
  11.     }  
  12.   
  13.     public boolean isEmpty() throws TemplateModelException  
  14.     {  
  15.         return true;  
  16.     }  
  17.   
  18.     public String getAsString() throws TemplateModelException  
  19.     {  
  20.         return "";  
  21.     }  
  22. }  
  23.          
  24.       
  25. /** 
  26.  * @author Ray (ayufox@gmail.com) 
  27.  */  
  28. public class DelegatingTemplateHashModel implements TemplateHashModel  
  29. {  
  30.     private TemplateHashModel target;  
  31.   
  32.     public DelegatingTemplateHashModel(TemplateHashModel target)  
  33.     {  
  34.         this.target = target;  
  35.     }  
  36.   
  37.     public TemplateModel get(String name) throws TemplateModelException  
  38.     {  
  39.         TemplateModel model = this.target.get(name);  
  40.         if (model == null)  
  41.         {  
  42.             return EmptyTemplateHashModel.INSTANCE;  
  43.         }  
  44.         if (model instanceof TemplateHashModel)  
  45.         {  
  46.             return new DelegatingTemplateHashModel((TemplateHashModel) model);  
  47.         }  
  48.         return model;  
  49.     }  
  50.   
  51.     public boolean isEmpty() throws TemplateModelException  
  52.     {  
  53.         return this.target.isEmpty();  
  54.     }  
  55. }  

    
分享到:
评论
3 楼 ayufox 2007-03-10  
受教,看来对freemarker了解的太少
2 楼 Readonly 2007-03-10  
N个版本以前就可以这样写了:
${(user.phone.areacode)?if_exists}

新版本只不过是把?if_eixsts替换成了!
1 楼 codeutil 2007-03-10  


FreeMarker是2.3.8吧? 现在最新版本是2.3.9.

相关推荐

    poi 3.8 版本全量包

    POI 3.8 版本是该项目的一个稳定发行版,它提供了丰富的API,使得开发者能够在Java环境中方便地读取、写入和修改这些文件。这个全量包包含了以下组件: 1. **poi-3.8-20120326.jar**:这是Apache POI的主要库,提供...

    FreeMarker参考手册

    通过深入学习这个"FreeMarker参考手册2[1].3.8.chm",开发者能够掌握FreeMarker的各个方面,从而在实际项目中灵活运用,提高开发效率和代码质量。无论是初学者还是有经验的开发者,都可以从中受益,解决在模板设计和...

    SpringMVC 3.8

    SpringMVC 3.8是Spring框架的一个重要版本,它为开发者提供了强大的Web应用程序开发能力。SpringMVC作为Spring框架的一部分,专注于处理HTTP请求和响应,实现模型-视图-控制器(MVC)的设计模式。在SpringMVC 3.8中...

    ssm+shiro所需包

    `poi-3.8-20120326.jar`是Apache POI库的一部分,用于读写Microsoft Office格式的文件,如Excel,在需要处理Excel数据的场景中非常有用。 `mysql-connector-java-5.1.21.jar`是MySQL数据库的JDBC驱动,使得Java程序...

    轻量级Java ee企业应用实战struts2+sping+hibernate整合开发源码(3.8节)

    在Java EE领域,Struts2、Spring和Hibernate是三大核心框架,它们的整合使用能够构建出高效、灵活的企业级应用程序。本实战项目基于"轻量级Java EE企业应用",通过Struts2作为表现层框架,Spring作为业务层管理器,...

    springmvc 各种jar包

    20,freemarker-2.3.20.jar 21,hamcrest-all-1.3.jar 22,hibernate-3.6.10.jar 23,hibernate-jpa-2.0-api-1.0.1.jar 24,hibernate-search-3.4.2.jar 25,hibernate-validator-4.2.0.jar 26,httpclient-4.2.3....

    jfinal-2.2-manual.pdf参考手册

    - **功能:** 提供了在JFinal框架中使用FreeMarker的方法。 #### 十二、JFinal架构及扩展 **12.1 概述** - **功能介绍:** JFinal采用了高度模块化的设计,易于扩展和定制。 **12.2 架构** - **架构说明:** ...

    jfinal-3.0-manual

    - **配置类**:所有JFinal框架的核心配置都集中在`JFinalConfig`类中实现。 - **配置顺序**:按照特定的顺序执行各个配置方法,以确保配置的正确性和有效性。 **2.2 configConstant(Constants me)** - **常量配置**...

    JFinal 最新2.2版本的开发手册

    ### JFinal 2.2版本开发手册知识点概览 #### 一、极速体验:Model与Bean合体 **1.1 极速体验Generator** - **功能简介**:JFinal 提供了一个强大的代码生成工具(Generator),能够快速生成基于特定数据库表的 ...

    jfinal pdf文档

    - 下载 JFinal 最新版本的库文件,将其加入项目的 classpath 中。 - 可以通过 Maven 或者直接下载 jar 包的方式进行。 **3. 修改 web.xml** - 在项目的 web.xml 文件中配置 JFinal 的前端控制器(FrontController)...

    jfinal_manual_3.2_jfinal最新手册

    - **依赖**:如果使用Maven或Gradle,则可以在`pom.xml`或`build.gradle`文件中添加依赖。 ##### 1.3 修改web.xml - **配置**:在`web.xml`中配置JFinal的前端过滤器(FrontController)。 - **示例**: ```xml ...

    struts2 最新版案例

    在“Struts2 最新版案例”中,我们关注的是一个基于Struts2.2.3.8版本的项目,这个版本在当时是Struts2的最新更新,它包含了对国际化(i18n)的支持和验证功能。 **1. Struts2框架** Struts2是Apache软件基金会的一...

    springboot参考指南中文word文档

    - **在Spring环境中使用YAML暴露属性**:通过`@ConfigurationProperties`将YAML映射到Java对象。 - **Multi-profile YAML文档**:可以在同一个YAML文件中定义多个profile。 - **YAML缺点**:尽管YAML非常强大,但...

    Jfinal-3.2手册

    Interceptor 是 AOP 在 JFinal 中的具体实现形式,用于在 Action 执行前后执行特定的操作。 **4.3 Before** Before 注解用于标识一个方法作为前置通知,该方法将在 Action 执行前调用。 **4.4 Clear** Clear ...

    Spring MVC面试宝典1.pdf

    在SpringMVC中,注解主要用于声明式的配置,使得开发人员可以在不使用XML配置的情况下实现控制器、请求映射等功能。 ##### 2.4 SpringMVC常用的注解有哪些及作用? - **@Controller**:标记一个类作为SpringMVC的...

    Spring-Reference_zh_CN(Spring中文参考手册)

    6.8.1. 在Spring中使用AspectJ来为domain object进行依赖注入 6.8.1.1. @Configurable object的单元测试 6.8.1.2. 多application context情况下的处理 6.8.2. Spring中其他的AspectJ切面 6.8.3. 使用Spring IoC来...

    spring web flow 官方文档

    它允许开发者在工作流定义中引用数据模型中的属性,执行计算和条件判断。 #### 4.2 EL Implementations Spring Web Flow支持多种EL实现,包括默认的SpEL(Spring Expression Language)以及可选的EL桥接至其他EL...

    spring chm文档

    6.8.1. 在Spring中使用AspectJ来为domain object进行依赖注入 6.8.2. Spring中其他的AspectJ切面 6.8.3. 使用Spring IoC来配置AspectJ的切面 6.8.4. 在Spring应用中使用AspectJ Load-time weaving(LTW) 6.9. ...

    Spring中文帮助文档

    2.2.5. 在classpath中自动搜索组件 2.3. 面向切面编程(AOP) 2.3.1. 更加简单的AOP XML配置 2.3.2. 对@AspectJ 切面的支持 2.3.3. 对bean命名pointcut( bean name pointcut element)的支持 2.3.4. 对AspectJ装载...

    Spring 2.0 开发参考手册

    6.8.1. 在Spring中使用AspectJ来为domain object进行依赖注入 6.8.2. Spring中其他的AspectJ切面 6.8.3. 使用Spring IoC来配置AspectJ的切面 6.8.4. 在Spring应用中使用AspectJ Load-time weaving(LTW) 6.9. ...

Global site tag (gtag.js) - Google Analytics