1、实现自定义FreemarkerManager
-
import freemarker.template.Configuration;
-
import freemarker.template.TemplateDirectiveModel;
-
import freemarker.template.TemplateException;
-
import org.apache.struts2.views.freemarker.FreemarkerManager;
-
import org.springframework.context.ApplicationContext;
-
import org.springframework.web.context.support.WebApplicationContextUtils;
-
import javax.servlet.ServletContext;
-
import java.util.Map;
-
-
-
-
public class CustomFreemarkerManager extends FreemarkerManager {
-
protected Configuration createConfiguration(ServletContext servletContext) throws TemplateException {
-
Configuration cfg = super.createConfiguration(servletContext);
-
ApplicationContext ctx = WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext);
-
Map<String,Object> beans=(Map<String,Object>)ctx.getBeansOfType(TemplateDirectiveModel.class);
-
for (String key : beans.keySet()) {
-
Object bean = beans.get(key);
-
if (bean != null && bean instanceof TemplateDirectiveModel)
-
cfg.setSharedVariable(key, bean);
-
}
-
return cfg;
-
}
-
}
2、在struts.properties中配置你的自定义管理类
- struts.freemarker.manager.classname=com.kms.framework.core.view.support.KmsFreemarkerManager
3、自定义TemplateDirectiveModel
- import static freemarker.template.ObjectWrapper.DEFAULT_WRAPPER;
-
- import java.io.IOException;
- import java.util.HashMap;
- import java.util.Iterator;
- import java.util.List;
- import java.util.Map;
- import java.util.Map.Entry;
-
- import javax.servlet.http.HttpSession;
-
- import org.apache.struts2.ServletActionContext;
-
- import com.newyulong.bcp.product.domain.TypeInfo;
- import com.newyulong.bcp.product.service.ITypeService;
- import com.newyulong.bcp.user.vo.Loginer;
-
- import freemarker.core.Environment;
- import freemarker.template.TemplateDirectiveBody;
- import freemarker.template.TemplateDirectiveModel;
- import freemarker.template.TemplateException;
- import freemarker.template.TemplateModel;
- import freemarker.template.TemplateModelException;
- import freemarker.template.TemplateNumberModel;
-
- /**
-
* @desc: 产品类别自定义标签
- */
- public class ProductTypeTemplateDirectiveModel implements TemplateDirectiveModel {
- //产品分类服务
- private ITypeService typeService;
- // 展示产品类别数目
- private static final String PARAM_COUNT = "count";
-
- // 默认
- private static final int DEAFAULT_COUNT = 5;
-
- public void execute(Environment environment, Map map,
- TemplateModel[] templateModels, TemplateDirectiveBody body)
- throws TemplateException, IOException {
- int count = 0, hot = 0;
- boolean countParamSet = false;
- // 获取传递进来的参数
- Iterator it = map.entrySet().iterator();
- while (it.hasNext()) {
- Map.Entry entry = (Entry) it.next();
- String paramName = entry.getKey().toString();
- TemplateModel paramValue = (TemplateModel) entry.getValue();
- if (paramName.equals(PARAM_COUNT)) {
- if (!(paramValue instanceof TemplateNumberModel)) {
- throw new TemplateModelException("The \"" + PARAM_COUNT
- + "\" parameter " + "must be a number.");
- }
- count = ((TemplateNumberModel) paramValue).getAsNumber()
- .intValue();
- countParamSet = true;
- if (count < 0) {
- throw new TemplateModelException("The \"" + PARAM_COUNT
- + "\" parameter " + "can't be negative.");
- }
- } else {
- throw new TemplateModelException("Unsupported parameter: "
- + paramName);
- }
-
- }
- // 参数为空时候设置默认值
- if (!countParamSet)
- count = DEAFAULT_COUNT;
-
- Map<String, Object> maps = getTypeList(String.valueOf(count));
-
- if (body != null) {
-
- environment.setVariable("typelist",
- DEFAULT_WRAPPER.wrap(maps.get("typeList")));
- // 真正开始处理输出内容
- body.render(environment.getOut());
- } else {
- throw new RuntimeException("missing body");
- }
- }
-
- /**
- *
- * @function 产品类别查询列表
- * @param count
- * @param hot
- * @return
- *
- */
- public Map<String, Object> getTypeList(String count) {
- Map<String, Object> maps = new HashMap<String, Object>();
- // 1.获取产品列表
- List<TypeInfo> list = typeService.getPreTypeList(count);
- maps.put("typeList", list);
- return maps;
-
- }
- // 获得用户信息
- private Loginer getLoginer() {
- HttpSession session = ServletActionContext.getRequest().getSession();
- return (Loginer) session.getAttribute(Loginer.USER_IN_SESSION);
- }
-
- public void setTypeService(ITypeService typeService) {
- this.typeService = typeService;
- }
4、在spring上下文中配置
-
-
<bean id="ptype" class="com.newyulong.bcp.web.tag.ProductTypeTemplateDirectiveModel"></bean>
5、在页面中使用你的标签吧
-
<div class="gen">
-
<h2 class="gen_tit">产品分类</h2>
-
<ul>
-
-
<@ptype>
-
<#list list as entity>
-
<li class="bto">?
-
<a href="${ctx}/web/productt.do?type=${entity.id}">
-
<#if entity.title?length gt 12 >
-
${entity.title[0..11]}...
-
<#else>
-
${entity.title}
-
</#if>
-
</a>
-
</li>
-
</#list>
-
</@ptype>
-
</ul>
-
</div>
分享到:
相关推荐
• 采用hibernate3+struts2+spring2+freemarker主流技术架构 • 懂html就能建站,提供最便利、合理的使用方式 • 强大、灵活的标签,用户自定义显示内容和显示方式 • 在设计上自身预先做了搜索引擎优化,增强对...
· 采用hibernate3+struts2+spring2+freemarker主流技术架构 · 懂html就能建站,提供最便利、合理的使用方式 · 强大、灵活的标签,用户自定义显示内容和显示方式 · 在设计上自身预先做了搜索引擎优化,增强对...
这个项目可能涉及了Struts2的Action和Interceptor,Spring的IoC和AOP,FreeMarker的模板渲染,以及Ajax的前后端交互。尽管描述中提到项目可能未完成所有功能,但它仍然展示了如何整合这些技术来构建一个动态的Web...
NULL 博文链接:https://renxin-327666062-qq-com.iteye.com/blog/1532731
Struts2、Spring和Hibernate是Java Web开发中的三大框架,它们各自负责不同的职责:Struts2主要用于MVC(模型-视图-控制器)架构的实现,Spring提供了强大的依赖注入和面向切面编程功能,而Hibernate则是一个优秀的...
Struts2的核心是拦截器链,它允许开发者自定义拦截器以实现特定的功能,如数据校验、登录检查等。此外,Struts2还支持多种视图技术,如JSP、FreeMarker等。 2. **Spring**:Spring是一个全面的后端开发框架,它的...
5. 视图展示:探讨如何使用JSP、FreeMarker或其他模板技术来渲染页面,以及如何利用Struts 2的标签库简化视图开发。 6. 拦截器和过滤器:讲解如何自定义Struts 2的拦截器来实现权限控制、日志记录等功能,以及如何...
网上投票系统基于“Struts2+Spring2+Hibernate3”技术栈,这是一套经典的Java Web开发框架组合,常被称为SSH框架。这三个框架协同工作,为开发者提供了强大的功能和灵活性,构建高效、可维护的投票应用程序。 ...
在SSH2整合中,Spring主要用来管理Struts2和Hibernate的bean实例,实现组件间的解耦,并提供事务管理服务。 Hibernate是一个持久化框架,用于简化Java应用与数据库之间的交互。它实现了对象关系映射(ORM),使得...
Struts2、Hibernate和Spring是Java Web开发中的三大框架,它们各自负责不同的职责,而SSH(Struts2、Spring、Hibernate)则是这三者的一种经典整合,为开发人员提供了高效、灵活的MVC(Model-View-Controller)架构...
在Struts 2中,Action类是业务逻辑处理的核心,请求通过配置的ActionMapping映射到相应的Action执行,返回的结果可以是JSP、FreeMarker模板或者其他自定义的结果类型。 **Spring框架** Spring是一个全面的后端应用...
Struts 2 提供了强大的拦截器机制,允许开发者自定义请求处理流程,还支持多种结果类型,如JSP、FreeMarker或Velocity模板。此外,Struts 2与Spring的集成使得依赖注入变得简单,提高了代码的可测试性。 **...
通过Spring插件,Struts2的动作类可以直接在Spring容器中管理,从而实现依赖注入。这样,无需在Action类中手动创建依赖对象,提高了代码的可测试性和可维护性。 **Spring与Hibernate集成** Spring提供了...
此外,Spring与Hibernate和Struts2有很好的集成,可以方便地实现事务管理、数据访问等功能。 当这三大框架结合在一起时,它们可以形成一个强大的开发平台。Spring作为基础架构,负责依赖注入和事务管理;Struts2...
至于标签中的“分页 struts2”,说明这个项目重点展示了如何在Struts2框架下实现分页。在实际操作中,开发者需要考虑如何传递当前页码、每页显示条数等参数,以及如何在后台进行正确的数据计算和查询。 综上所述,...
Struts2还支持拦截器,允许自定义行为并实现AOP(面向切面编程)。 其次,Hibernate3.2是一个持久化框架,用于简化Java对象与关系数据库之间的映射。它提供了ORM(对象关系映射)服务,使得开发者可以使用面向对象...
Struts2 负责控制流程,Spring 2.5 实现依赖注入和数据访问,JDBC 处理数据库交互,Ext 创建用户界面,而 JSON 则作为前后端数据交换的桥梁。这个实例对于学习和理解这些技术的集成具有很高的参考价值。
【Struts2+Spring+Hibernate新闻发布会系统】 这个系统是一个基于经典的Java EE技术栈——Struts2、Spring和Hibernate构建的新闻发布平台。这样的架构选择旨在实现高效、灵活且可维护的后端服务,同时提供良好的...