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、Spring和Freemarker是Java Web开发中的三个重要框架,它们分别在MVC模式的不同层面提供了功能支持。Struts2是一个基于MVC设计模式的Web应用框架,Spring是一个全面的后端应用程序框架,而Freemarker则是一...
这将使Struts2能够从Spring容器中获取Action实例,实现Action的依赖注入。配置通常包括修改`struts.xml`中的`<package>`标签,添加`parent="struts-default"`和`namespace="/"`, 并使用`<action>`标签的`class`属性...
这个项目可能涉及了Struts2的Action和Interceptor,Spring的IoC和AOP,FreeMarker的模板渲染,以及Ajax的前后端交互。尽管描述中提到项目可能未完成所有功能,但它仍然展示了如何整合这些技术来构建一个动态的Web...
Struts2、Spring和Hibernate是Java Web开发中的三大框架,它们各自负责不同的职责:Struts2主要用于MVC(模型-视图-控制器)架构的实现,Spring提供了强大的依赖注入和面向切面编程功能,而Hibernate则是一个优秀的...
Struts2的核心是拦截器链,它允许开发者自定义拦截器以实现特定的功能,如数据校验、登录检查等。此外,Struts2还支持多种视图技术,如JSP、FreeMarker等。 2. **Spring**:Spring是一个全面的后端开发框架,它的...
Struts2、Spring3和Hibernate4是Java Web开发中的三大框架,它们的组合使用能够构建出功能强大且灵活的企业级应用程序。在这个“Struts2+Spring3+Hibernate4零配置所需全部jar包”中,包含了这三个框架运行所必需的...
5. 视图展示:探讨如何使用JSP、FreeMarker或其他模板技术来渲染页面,以及如何利用Struts 2的标签库简化视图开发。 6. 拦截器和过滤器:讲解如何自定义Struts 2的拦截器来实现权限控制、日志记录等功能,以及如何...
网上投票系统基于“Struts2+Spring2+Hibernate3”技术栈,这是一套经典的Java Web开发框架组合,常被称为SSH框架。这三个框架协同工作,为开发者提供了强大的功能和灵活性,构建高效、可维护的投票应用程序。 ...
在探讨“Struts2+Spring”这一主题时,我们不仅关注到这两个框架本身的特性与功能,还需要深入了解如何将它们有效地整合在一起,以实现更高效、更灵活的应用开发。本篇文章将围绕“Struts2+Spring”所需的核心JAR包...
在SSH2整合中,Spring主要用来管理Struts2和Hibernate的bean实例,实现组件间的解耦,并提供事务管理服务。 Hibernate是一个持久化框架,用于简化Java应用与数据库之间的交互。它实现了对象关系映射(ORM),使得...
Struts2、Hibernate和Spring是Java开发中常用的三大框架,它们各自负责Web应用的不同层面:Struts2专注于表现层管理,Hibernate处理数据持久化,而Spring则作为一个全面的框架,涵盖了依赖注入、事务管理、安全控制...
Struts2、Hibernate和Spring是Java Web开发中的三大框架,它们各自负责不同的职责,而SSH(Struts2、Spring、Hibernate)则是这三者的一种经典整合,为开发人员提供了高效、灵活的MVC(Model-View-Controller)架构...
Struts2支持多种模板技术,如FreeMarker和JSP,能够轻松实现动态页面渲染。 Spring3是全面的企业级应用框架,它在业务层提供了依赖注入(DI)和面向切面编程(AOP)的能力,帮助开发者管理对象的生命周期和装配。...
在Struts 2中,Action类是业务逻辑处理的核心,请求通过配置的ActionMapping映射到相应的Action执行,返回的结果可以是JSP、FreeMarker模板或者其他自定义的结果类型。 **Spring框架** Spring是一个全面的后端应用...
Struts 2 提供了强大的拦截器机制,允许开发者自定义请求处理流程,还支持多种结果类型,如JSP、FreeMarker或Velocity模板。此外,Struts 2与Spring的集成使得依赖注入变得简单,提高了代码的可测试性。 **...
通过Spring插件,Struts2的动作类可以直接在Spring容器中管理,从而实现依赖注入。这样,无需在Action类中手动创建依赖对象,提高了代码的可测试性和可维护性。 **Spring与Hibernate集成** Spring提供了...
4. 标签支持:Struts1使用JSTL和自定义标签,而Struts2使用OGNL表达式语言和丰富的内置标签。 5. 验证:Struts1的验证通常是手动实现,而Struts2支持手动和验证框架的集成,提供更灵活的验证机制。 在Web项目开发...