`
ssxxjjii
  • 浏览: 938053 次
  • 性别: 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.0+Spring2.5+freemarker+ajax

    这个项目可能涉及了Struts2的Action和Interceptor,Spring的IoC和AOP,FreeMarker的模板渲染,以及Ajax的前后端交互。尽管描述中提到项目可能未完成所有功能,但它仍然展示了如何整合这些技术来构建一个动态的Web...

    Struts2、Spring、Freemarker自定义标签

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

    struts2+spring+hibernate分页,事务,自定义切面

    Struts2、Spring和Hibernate是Java Web开发中的三大框架,它们各自负责不同的职责:Struts2主要用于MVC(模型-视图-控制器)架构的实现,Spring提供了强大的依赖注入和面向切面编程功能,而Hibernate则是一个优秀的...

    Struts2+Spring+EJB框架整合实例

    Struts2的核心是拦截器链,它允许开发者自定义拦截器以实现特定的功能,如数据校验、登录检查等。此外,Struts2还支持多种视图技术,如JSP、FreeMarker等。 2. **Spring**:Spring是一个全面的后端开发框架,它的...

    轻量级Java+EE企业应用实战——Struts+2+Spring+Hibernate整合开发电子书3.pdf

    5. 视图展示:探讨如何使用JSP、FreeMarker或其他模板技术来渲染页面,以及如何利用Struts 2的标签库简化视图开发。 6. 拦截器和过滤器:讲解如何自定义Struts 2的拦截器来实现权限控制、日志记录等功能,以及如何...

    网上投票系统(struts2+spring2+hibernarte3)

    网上投票系统基于“Struts2+Spring2+Hibernate3”技术栈,这是一套经典的Java Web开发框架组合,常被称为SSH框架。这三个框架协同工作,为开发者提供了强大的功能和灵活性,构建高效、可维护的投票应用程序。 ...

    Struts2+Spring+Hibernate+Ajax框架整合

    在SSH2整合中,Spring主要用来管理Struts2和Hibernate的bean实例,实现组件间的解耦,并提供事务管理服务。 Hibernate是一个持久化框架,用于简化Java应用与数据库之间的交互。它实现了对象关系映射(ORM),使得...

    struts2+hibernate+spring开发包

    Struts2、Hibernate和Spring是Java Web开发中的三大框架,它们各自负责不同的职责,而SSH(Struts2、Spring、Hibernate)则是这三者的一种经典整合,为开发人员提供了高效、灵活的MVC(Model-View-Controller)架构...

    struts+spring+ibatis的Demo

    在Struts 2中,Action类是业务逻辑处理的核心,请求通过配置的ActionMapping映射到相应的Action执行,返回的结果可以是JSP、FreeMarker模板或者其他自定义的结果类型。 **Spring框架** Spring是一个全面的后端应用...

    论坛系统(Struts 2+Hibernate+Spring实现)

    Struts 2 提供了强大的拦截器机制,允许开发者自定义请求处理流程,还支持多种结果类型,如JSP、FreeMarker或Velocity模板。此外,Struts 2与Spring的集成使得依赖注入变得简单,提高了代码的可测试性。 **...

    Struts2+Spring+Hibernate In Action

    通过Spring插件,Struts2的动作类可以直接在Spring容器中管理,从而实现依赖注入。这样,无需在Action类中手动创建依赖对象,提高了代码的可测试性和可维护性。 **Spring与Hibernate集成** Spring提供了...

    hibernate3+struts2+spring

    此外,Spring与Hibernate和Struts2有很好的集成,可以方便地实现事务管理、数据访问等功能。 当这三大框架结合在一起时,它们可以形成一个强大的开发平台。Spring作为基础架构,负责依赖注入和事务管理;Struts2...

    struts2+spring+ibatis

    至于标签中的“分页 struts2”,说明这个项目重点展示了如何在Struts2框架下实现分页。在实际操作中,开发者需要考虑如何传递当前页码、每页显示条数等参数,以及如何在后台进行正确的数据计算和查询。 综上所述,...

    Struts2+Hibernate3.2+spring2.0+sqlserver2000

    Struts2还支持拦截器,允许自定义行为并实现AOP(面向切面编程)。 其次,Hibernate3.2是一个持久化框架,用于简化Java对象与关系数据库之间的映射。它提供了ORM(对象关系映射)服务,使得开发者可以使用面向对象...

    struts2+spring2.5+jdbc+ext+json实例用到的lib包

    Struts2 负责控制流程,Spring 2.5 实现依赖注入和数据访问,JDBC 处理数据库交互,Ext 创建用户界面,而 JSON 则作为前后端数据交换的桥梁。这个实例对于学习和理解这些技术的集成具有很高的参考价值。

    struts2+spring+hibernate新闻发布系统

    【Struts2+Spring+Hibernate新闻发布会系统】 这个系统是一个基于经典的Java EE技术栈——Struts2、Spring和Hibernate构建的新闻发布平台。这样的架构选择旨在实现高效、灵活且可维护的后端服务,同时提供良好的...

Global site tag (gtag.js) - Google Analytics