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就能建站,提供最便利、合理的使用方式 · 强大、灵活的标签,用户自定义显示内容和显示方式 · 在设计上自身预先做了搜索引擎优化,增强对...
NULL 博文链接:https://renxin-327666062-qq-com.iteye.com/blog/1532731
采用hibernate3+struts2+spring2+freemarker主流技术架构 懂html就能建站,提供最便利、合理的使用方式 强大、灵活的标签,用户自定义显示内容和显示方式 在设计上自身预先做了搜索引擎优化,增强对搜索引擎的友好...
基于java技术开发,继承其强大、稳定、安全、高效、跨平台等多方面的优点采用hibernate3+struts2+spring2+freemarker主流技术架构 懂html就能建站,提供最便利、合理的使用方式 强大、灵活的标签,用户自定义显示...
采用hibernate3+struts2+spring2+freemarker主流技术架构 懂html就能建站,提供最便利、合理的使用方式 强大、灵活的标签,用户自定义显示内容和显示方式 在设计上自身预先做了搜索引擎优化,增强对搜索引擎的友好...
·采用hibernate3+struts2+spring2+freemarker主流技术架构 ·懂html就能建站,提供最便利、合理的使用方式 ·强大、灵活的标签,用户自定义显示内容和显示方式 ·在设计上自身预先做了搜索引擎优化,增强对搜索...
继承其强大、稳定、安全、高效、跨平台等多方面的优点,采用hibernate3+struts2+spring2+freemarker主流技术架构,懂html就能建站,提供最便利、合理的使用方式 ,强大、灵活的标签,用户自定义显示内容和显示方式 ...
· 采用hibernate3+struts2+spring2+freemarker技术架构 · 基于java技术开发,继承其强大、稳定、安全、高效、跨平台等多方面的优点,支持mysql、oracle、sqlserver等数据库 · 懂html就能建站,提供最便利、合理的...
· 采用hibernate3+struts2+spring2+freemarker主流技术架构 · 懂html就能建站,提供最便利、合理的使用方式 · 强大、灵活的标签,用户自定义显示内容和显示方式 · 在设计上自身预先做了搜索引擎优化,增强对搜索...
采用hibernate3+struts2+spring2+freemarker主流技术架构 懂html就能建站,提供最便利、合理的使用方式 强大、灵活的标签,用户自定义显示内容和显示方式 在设计上自身预先做了搜索引擎优化,增强对搜索引擎的友好...
JEECMS是JavaEE版网站管理系统(Java Enterprise Edition ...采用hibernate3+struts2+spring2+freemarker主流技术架构 懂html就能建站,提供最便利、合理的使用方式 强大、灵活的标签,用户自定义显示内容和显示方式
开发语言:JAVA开发框架:Struts2+Spring+Hibernate后台用到Freemarker模板引擎服务器环境:JDK1.7Tomcat7.0Mysql5.1演示网站用户名:admin,密码:222222安装教程:1、将重新上传到支持JAVA的空间或者服务器上;2、...
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,也叫做...
采用hibernate3+struts2+spring2+freemarker主流技术架构 懂html就能建站,提供最便利、合理的使用方式 强大、灵活的标签,用户自定义显示内容和显示方式 在设计上自身预先做了搜索引擎优化,增强对搜索引擎的友好...
如果需要实现自己的配置管理器,开发者则可以实现一个实现Configuration接口的类,该类可以自己加载Struts 2配置文件. struts.locale 指定Web应用的默认Locale. struts.i18n.encoding 指定Web应用的默认编码集.该...
采用hibernate3+struts2+spring2+freemarker主流技术架构 懂html就能建站,提供最便利、合理的使用方式 强大、灵活的标签,用户自定义显示内容和显示方式 在设计上自身预先做了搜索引擎优化,增强JEECMS v2.3.2 正式...
最后,依赖注入也成了Struts2王国中的一等公民,这项功能是通过Spring框架的插件和Plexus共同提供的,与PicoContainer的结合工作还正在进行中。 本书的目的,是为了帮助读者掌握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...
本系统是完全基于java的先进的流行架构HSSF(hibernate+spring+struts+freemarker) 开发的一套完整的集信息发布于一体的网站管理系统 整个系统的设计于开发从2005年5月至今的1.5版. 已经有两个成功案例(例如:...