`
ssxxjjii
  • 浏览: 950380 次
  • 性别: 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自定义标签

    Struts2、Spring和Freemarker是Java Web开发中的三个重要框架,它们分别在MVC模式的不同层面提供了功能支持。Struts2是一个基于MVC设计模式的Web应用框架,Spring是一个全面的后端应用程序框架,而Freemarker则是一...

    struts2+spring练习

    这将使Struts2能够从Spring容器中获取Action实例,实现Action的依赖注入。配置通常包括修改`struts.xml`中的`&lt;package&gt;`标签,添加`parent="struts-default"`和`namespace="/"`, 并使用`&lt;action&gt;`标签的`class`属性...

    Struts2.0+Spring2.5+freemarker+ajax

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

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

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

    Struts2+Spring+EJB框架整合实例

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

    Struts2+Spring3+Hibernate4零配置所需全部jar包

    Struts2、Spring3和Hibernate4是Java Web开发中的三大框架,它们的组合使用能够构建出功能强大且灵活的企业级应用程序。在这个“Struts2+Spring3+Hibernate4零配置所需全部jar包”中,包含了这三个框架运行所必需的...

    轻量级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

    在探讨“Struts2+Spring”这一主题时,我们不仅关注到这两个框架本身的特性与功能,还需要深入了解如何将它们有效地整合在一起,以实现更高效、更灵活的应用开发。本篇文章将围绕“Struts2+Spring”所需的核心JAR包...

    Struts2+Spring+Hibernate+Ajax框架整合

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

    struts2+hibernate+spring整合

    Struts2、Hibernate和Spring是Java开发中常用的三大框架,它们各自负责Web应用的不同层面:Struts2专注于表现层管理,Hibernate处理数据持久化,而Spring则作为一个全面的框架,涵盖了依赖注入、事务管理、安全控制...

    struts2+hibernate+spring开发包

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

    Struts2+Spring3+Hibernate4必备整合包

    Struts2支持多种模板技术,如FreeMarker和JSP,能够轻松实现动态页面渲染。 Spring3是全面的企业级应用框架,它在业务层提供了依赖注入(DI)和面向切面编程(AOP)的能力,帮助开发者管理对象的生命周期和装配。...

    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提供了...

    Struts2+hibernate+spring的常见面试题

    4. 标签支持:Struts1使用JSTL和自定义标签,而Struts2使用OGNL表达式语言和丰富的内置标签。 5. 验证:Struts1的验证通常是手动实现,而Struts2支持手动和验证框架的集成,提供更灵活的验证机制。 在Web项目开发...

Global site tag (gtag.js) - Google Analytics