Freemarker对于多风格的应用

原创 2007年10月09日 09:55:00

论坛产品或者博客产品大多都支持多套模板,用户可以进行随意切换来体验各种风格。OSPod.Forum 提供了截然不同的两套用户体验风格,在不同的模板之间需要有一些公用的地方,或者通过扩展其中一套模板或者进行微调之后达到一种新的风格,如基于蓝色模板修改成为黑色比较酷的风格等等?如何保障部分模板之间的复用呢?

freemarker.template.Configuration给我们提供了模板装载机制的修改方案,通过config.setTemplateLoader(TemplateLoaderImp) ,我们可以告诉Freemarker使用哪个模板装载类,OK,这样需要实现我们自己的模板转载类。

OSPod.Forum通过扩展TemplateLoader来提供模板装载机制,该类的基础原型是基于ServletContextTemplateLoader来进行实现,在该类基础上覆盖findTemplateSource方法实现,参考如下:

public Object findTemplateSource(String name) throws IOException ...{
      String fullPath 
= path + name;
      
// First try to open as plain file (to bypass servlet container resource caches).
      try ...{
          String realPath 
= servletContext.getRealPath(fullPath);
          
if (realPath != null...{
              File file 
= new File(realPath);
              
if(!file.isFile()) ...{  //如果找不到模板
                  String tplStyle = (String)ActionContext.getContext().getAttributeMap().get( "_tplStyle" );
                  
if(!Checker.isEmpty( tplStyle ))...{
                                          
//替换模板寻找路径
                      String refStyle = GeneralConfigRepository.getTemplateExtendFrom(tplStyle);
                      realPath 
= realPath.replaceAll( tplStyle, refStyle );
                      file 
= new File(realPath);
                      
if(!file.isFile())
                       
return null;
                  }
else...{
                      
return null;
                  }

              }

              
if(file.canRead()) ...{                    
                  
return file;
              }

          }

      }
 catch (SecurityException e) ...{
          logger.error( 
"获得模版" + fullPath + "错误!", e );
      }

      
          
      
// If it fails, try to open it with servletContext.getResource.
      URL url = null;
      
try ...{
          url 
= servletContext.getResource(fullPath);
      }
 catch(MalformedURLException e) ...{
          logger.warn(
"Could not retrieve resource " + fullPath, e);
          
return null;
      }

      
return url == null ? null : new URLTemplateSource(url);
  }

什么才是提高ASP性能的最佳选择(四)

(作者:青苹果工作室编译 2000年11月13日 13:45)  在本文的第一部分中,我回顾了有关ASP开发的一些基本问题,介绍了一些性能测试的结果,以理解我们放置在页面中的代码可能对运行性能造成什么...
  • ghj1976
  • ghj1976
  • 2000-11-30 11:38:00
  • 1129

性能优化:用FreeMarker实现页面静态化

众所周知,随着网站的访问量增加,如何给用户以良好的访问体验就显得尤为重要。提升网站性能便成为一些网站面临的一大难题,像hao123这样的导航网站要提升网站的性能只要部署的web服务器数量足够就可以承载...
  • u013161431
  • u013161431
  • 2017-09-20 11:15:37
  • 274

FreeMarker的应用场景

FreeMarker的应用场景。
  • zzpzheng
  • zzpzheng
  • 2014-11-22 22:03:28
  • 4816

freemarker if 多条件判断

**tip:**当你想测试是否 x > 0 或 x >= 0,编写 0> 和 = 0> 是错误的, 因为第一个 > 会结束 #if 标签。要这么来做,可以编写 或 。也请注意,如果比较发生在括号内...
  • forever_insist
  • forever_insist
  • 2017-03-16 14:57:05
  • 22386

购物商城---freemarker在项目中的应用

一 1.通过模板+数据–》生成静态化页面 2.缺点:数据不实时 3.适用于于数据长时间不更新的情况二、在项目中搭建freemarker freemarker.xml ...
  • zhou920786312
  • zhou920786312
  • 2017-04-18 13:15:06
  • 413

freemarker 生成word,支持一个单元格生成多张图片

  • 2017年05月24日 00:10
  • 916KB
  • 下载

使用FreeMarker邮件模版来发送邮件

转自 Spring为FreeMarker提供了一个FreeMarkerConfigurer类,通过此类可方便地创建FreeMarker的基础环境,Spring提供FreeMarker...
  • wslidandan
  • wslidandan
  • 2014-07-02 15:04:11
  • 1129

FreeMarker中的List排序

平常在使用的时候,如果需要排序,一般是通过DAO层实现,如果要随时更改排序方式,确实有些不便。不过freemarker已经给我们想到了,下面是使用方法: 确实简单吧,不过这是升...
  • Eason_lanxum
  • Eason_lanxum
  • 2012-05-11 10:55:57
  • 1154

Velocity 和 FreeMarker区别

  • 2011年05月20日 12:47
  • 7KB
  • 下载

Freemarker的常用技巧总结

1,截取字符串 有的时候我们在页面中不需要显示那么长的字符串,比如新闻标题,这样用下面的例子就可以自定义显示的长度 gt. >= gte            ${jstbqkVO.gzd...
  • chenleixing
  • chenleixing
  • 2015-05-14 08:53:36
  • 2115
收藏助手
不良信息举报
您举报文章:Freemarker对于多风格的应用
举报原因:
原因补充:

(最多只允许输入30个字)