`
ssxxjjii
  • 浏览: 935065 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Struts2+Spring+Freemarker实现自定义标签

 
阅读更多

 1、实现自定义FreemarkerManager

 

  1. import freemarker.template.Configuration; 
  2. import freemarker.template.TemplateDirectiveModel; 
  3. import freemarker.template.TemplateException; 
  4. import org.apache.struts2.views.freemarker.FreemarkerManager; 
  5. import org.springframework.context.ApplicationContext; 
  6. import org.springframework.web.context.support.WebApplicationContextUtils; 
  7. import javax.servlet.ServletContext; 
  8. import java.util.Map; 
  9. /** 
  10.  * @desc: 增加自定义业务标签,此list中的string必须继承于TemplateDirectiveModel,并且配置在SPRING上下文中 
  11.  */ 
  12. public class CustomFreemarkerManager extends FreemarkerManager { 
  13.     protected Configuration createConfiguration(ServletContext servletContext) throws TemplateException { 
  14.         Configuration cfg = super.createConfiguration(servletContext); 
  15.        ApplicationContext ctx = WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext); 
  16.        Map<String,Object> beans=(Map<String,Object>)ctx.getBeansOfType(TemplateDirectiveModel.class); 
  17.         for (String key : beans.keySet()) { 
  18.             Object bean = beans.get(key); 
  19.             if (bean != null && bean instanceof TemplateDirectiveModel) 
  20.                 cfg.setSharedVariable(key, bean); 
  21.         } 
  22.         return cfg; 
  23.     } 

 2、在struts.properties中配置你的自定义管理类

  1. struts.freemarker.manager.classname=com.kms.framework.core.view.support.KmsFreemarkerManager 

 3、自定义TemplateDirectiveModel

  1. import static freemarker.template.ObjectWrapper.DEFAULT_WRAPPER;  
  2.   
  3. import java.io.IOException;  
  4. import java.util.HashMap;  
  5. import java.util.Iterator;  
  6. import java.util.List;  
  7. import java.util.Map;  
  8. import java.util.Map.Entry;  
  9.   
  10. import javax.servlet.http.HttpSession;  
  11.   
  12. import org.apache.struts2.ServletActionContext;  
  13.   
  14. import com.newyulong.bcp.product.domain.TypeInfo;  
  15. import com.newyulong.bcp.product.service.ITypeService;  
  16. import com.newyulong.bcp.user.vo.Loginer;  
  17.   
  18. import freemarker.core.Environment;  
  19. import freemarker.template.TemplateDirectiveBody;  
  20. import freemarker.template.TemplateDirectiveModel;  
  21. import freemarker.template.TemplateException;  
  22. import freemarker.template.TemplateModel;  
  23. import freemarker.template.TemplateModelException;  
  24. import freemarker.template.TemplateNumberModel;  
  25.   
  26. /**  
  27.   * @desc: 产品类别自定义标签  
  28.  */  
  29. public class ProductTypeTemplateDirectiveModel implements TemplateDirectiveModel {  
  30.     //产品分类服务 
  31.     private ITypeService typeService;  
  32.     // 展示产品类别数目  
  33.     private static final String PARAM_COUNT = "count";  
  34.    
  35.     // 默认  
  36.     private static final int DEAFAULT_COUNT = 5;  
  37.     
  38.     public void execute(Environment environment, Map map,  
  39.             TemplateModel[] templateModels, TemplateDirectiveBody body)  
  40.             throws TemplateException, IOException {  
  41.         int count = 0hot = 0;  
  42.         boolean countParamSet = false;  
  43.         // 获取传递进来的参数  
  44.         Iterator it = map.entrySet().iterator();  
  45.         while (it.hasNext()) {  
  46.             Map.Entry entry = (Entry) it.next();  
  47.             String paramName = entry.getKey().toString();  
  48.             TemplateModel paramValue = (TemplateModel) entry.getValue();  
  49.             if (paramName.equals(PARAM_COUNT)) {  
  50.                 if (!(paramValue instanceof TemplateNumberModel)) {  
  51.                     throw new TemplateModelException("The \"" + PARAM_COUNT  
  52.                             + "\" parameter " + "must be a number.");  
  53.                 }  
  54.                 count = ((TemplateNumberModel) paramValue).getAsNumber()  
  55.                         .intValue();  
  56.                 countParamSet = true;  
  57.                 if (count < 0) {  
  58.                     throw new TemplateModelException("The \"" + PARAM_COUNT  
  59.                             + "\" parameter " + "can't be negative.");  
  60.                 }  
  61.             } else {  
  62.                 throw new TemplateModelException("Unsupported parameter: "  
  63.                         + paramName);  
  64.             }  
  65.   
  66.         }  
  67.         // 参数为空时候设置默认值  
  68.         if (!countParamSet)  
  69.             count = DEAFAULT_COUNT;  
  70.          
  71.         Map<String, Object> maps = getTypeList(String.valueOf(count));  
  72.   
  73.         if (body != null) {  
  74.   
  75.             environment.setVariable("typelist",  
  76.                     DEFAULT_WRAPPER.wrap(maps.get("typeList")));  
  77.             // 真正开始处理输出内容  
  78.             body.render(environment.getOut());  
  79.         } else {  
  80.             throw new RuntimeException("missing body");  
  81.         }  
  82.     }  
  83.   
  84.     /**  
  85.      *   
  86.      * @function 产品类别查询列表  
  87.      * @param count  
  88.      * @param hot  
  89.      * @return  
  90.      *   
  91.      */  
  92.     public Map<String, Object> getTypeList(String count) {  
  93.         Map<String, Object> maps = new HashMap<String, Object>();  
  94.         // 1.获取产品列表  
  95.         List<TypeInfo> list = typeService.getPreTypeList(count);  
  96.         maps.put("typeList", list);  
  97.         return maps;  
  98.   
  99.     }  
  100.     // 获得用户信息 
  101.     private Loginer getLoginer() {  
  102.         HttpSession session = ServletActionContext.getRequest().getSession();  
  103.         return (Loginer) session.getAttribute(Loginer.USER_IN_SESSION);  
  104.     }  
  105.   
  106.     public void setTypeService(ITypeService typeService) {  
  107.         this.typeService = typeService;  
  108.     }  

4、在spring上下文中配置

  1. <!--产品类别标签-->  
  2. <bean id="ptype" class="com.newyulong.bcp.web.tag.ProductTypeTemplateDirectiveModel"></bean>  

 5、在页面中使用你的标签吧

  1. <div class="gen">  
  2. <h2 class="gen_tit">产品分类</h2>  
  3.     <ul>  
  4.       <!--产品分类-->  
  5.       <@ptype>  
  6.                  <#list list as entity>  
  7.                      <li class="bto">?  
  8.                          <a href="${ctx}/web/productt.do?type=${entity.id}">  
  9.                              <#if entity.title?length gt 12 >  
  10.                                  ${entity.title[0..11]}...  
  11.                               <#else>  
  12.                                  ${entity.title}  
  13.                              </#if>  
  14.                          </a>  
  15.                      </li>  
  16.                  </#list>  
  17.          </@ptype>  
  18.     </ul>  
  19. </div>  

 

分享到:
评论
1 楼 dl374868471 2012-04-23  
最近在做个需要生成静态页的 项目 大虾方便的话 能否帮小弟指教一下QQ:374868471 多谢

相关推荐

    hibernate3+struts2+spring2+freemarker 主流技术架构 实例

    • 采用hibernate3+struts2+spring2+freemarker主流技术架构 • 懂html就能建站,提供最便利、合理的使用方式 • 强大、灵活的标签,用户自定义显示内容和显示方式 • 在设计上自身预先做了搜索引擎优化,增强对...

    jeecmsv2.3.2 内容管理系统 (hibernate3+struts2+spring2+freemarker)

    · 采用hibernate3+struts2+spring2+freemarker主流技术架构 · 懂html就能建站,提供最便利、合理的使用方式 · 强大、灵活的标签,用户自定义显示内容和显示方式 · 在设计上自身预先做了搜索引擎优化,增强对...

    Struts2、Spring、Freemarker自定义标签

    NULL 博文链接:https://renxin-327666062-qq-com.iteye.com/blog/1532731

    jeecms-src.rar_com.jeec_freemarker_freemarker struts2_单点登录

    采用hibernate3+struts2+spring2+freemarker主流技术架构 懂html就能建站,提供最便利、合理的使用方式 强大、灵活的标签,用户自定义显示内容和显示方式 在设计上自身预先做了搜索引擎优化,增强对搜索引擎的友好...

    JEECMS3.0.4使用教程

    基于java技术开发,继承其强大、稳定、安全、高效、跨平台等多方面的优点采用hibernate3+struts2+spring2+freemarker主流技术架构 懂html就能建站,提供最便利、合理的使用方式 强大、灵活的标签,用户自定义显示...

    JEECMS v2.3.2 正式版用源码

    采用hibernate3+struts2+spring2+freemarker主流技术架构 懂html就能建站,提供最便利、合理的使用方式 强大、灵活的标签,用户自定义显示内容和显示方式 在设计上自身预先做了搜索引擎优化,增强对搜索引擎的友好...

    JEEcms目前国内的cms领跑者

    ·采用hibernate3+struts2+spring2+freemarker主流技术架构 ·懂html就能建站,提供最便利、合理的使用方式 ·强大、灵活的标签,用户自定义显示内容和显示方式 ·在设计上自身预先做了搜索引擎优化,增强对搜索...

    jeecms3.0.4

    继承其强大、稳定、安全、高效、跨平台等多方面的优点,采用hibernate3+struts2+spring2+freemarker主流技术架构,懂html就能建站,提供最便利、合理的使用方式 ,强大、灵活的标签,用户自定义显示内容和显示方式 ...

    jeecms-2.4.2(源码+安装包)

    · 采用hibernate3+struts2+spring2+freemarker技术架构 · 基于java技术开发,继承其强大、稳定、安全、高效、跨平台等多方面的优点,支持mysql、oracle、sqlserver等数据库 · 懂html就能建站,提供最便利、合理的...

    jee cms学习文档

    · 采用hibernate3+struts2+spring2+freemarker主流技术架构 · 懂html就能建站,提供最便利、合理的使用方式 · 强大、灵活的标签,用户自定义显示内容和显示方式 · 在设计上自身预先做了搜索引擎优化,增强对搜索...

    JEECMS v2.2 beta 贺岁版

    采用hibernate3+struts2+spring2+freemarker主流技术架构 懂html就能建站,提供最便利、合理的使用方式 强大、灵活的标签,用户自定义显示内容和显示方式 在设计上自身预先做了搜索引擎优化,增强对搜索引擎的友好...

    jeecms-2.3.2-final源代码

    JEECMS是JavaEE版网站管理系统(Java Enterprise Edition ...采用hibernate3+struts2+spring2+freemarker主流技术架构 懂html就能建站,提供最便利、合理的使用方式 强大、灵活的标签,用户自定义显示内容和显示方式

    凌夕卡密微商城 v1.0.1

    开发语言:JAVA开发框架:Struts2+Spring+Hibernate后台用到Freemarker模板引擎服务器环境:JDK1.7Tomcat7.0Mysql5.1演示网站用户名:admin,密码:222222安装教程:1、将重新上传到支持JAVA的空间或者服务器上;2、...

    Struts2 in action中文版

    8.1.1 页面上:如何使用自定义结果组件构建Struts 2 Ajax应用程序 171 8.1.2 实现JSON结果类型 173 8.2 常用的结果类型 180 8.2.1 RequestDispatcher,也叫做dispatcher 180 8.2.2 ServletRedirectResult,也叫做...

    JEECMS 2.3.1 Beta 系统程序

    采用hibernate3+struts2+spring2+freemarker主流技术架构 懂html就能建站,提供最便利、合理的使用方式 强大、灵活的标签,用户自定义显示内容和显示方式 在设计上自身预先做了搜索引擎优化,增强对搜索引擎的友好...

    Struts2属性文件详解

    如果需要实现自己的配置管理器,开发者则可以实现一个实现Configuration接口的类,该类可以自己加载Struts 2配置文件. struts.locale 指定Web应用的默认Locale. struts.i18n.encoding 指定Web应用的默认编码集.该...

    JavaEE版网站管理系统

    采用hibernate3+struts2+spring2+freemarker主流技术架构 懂html就能建站,提供最便利、合理的使用方式 强大、灵活的标签,用户自定义显示内容和显示方式 在设计上自身预先做了搜索引擎优化,增强JEECMS v2.3.2 正式...

    深入浅出struts2

    最后,依赖注入也成了Struts2王国中的一等公民,这项功能是通过Spring框架的插件和Plexus共同提供的,与PicoContainer的结合工作还正在进行中。 本书的目的,是为了帮助读者掌握Struts2框架,并能够对组成框架的功能...

    Struts2 入门培训

    4 1.3.2. 受控目录 5 2. 入门例子 5 2.1. 项目 5 2.2. 在WEB.XML中,配置FILTERDISPATCHER过滤器 6 2.3. 配置STRUTS.PROPERTIES 6 2.4. 编写一个简单的ACTION类 7 2.5. STRUTS.XML配置文件 8...

    基于HSS的网站管理系统和新闻发布系统

    本系统是完全基于java的先进的流行架构HSSF(hibernate+spring+struts+freemarker) 开发的一套完整的集信息发布于一体的网站管理系统 整个系统的设计于开发从2005年5月至今的1.5版. 已经有两个成功案例(例如:...

Global site tag (gtag.js) - Google Analytics