1:FreemarkerManager:
package com.fangtoon.appcenterui.framework.struts2; import java.util.Map; import java.util.Map.Entry; import javax.servlet.ServletContext; import org.apache.struts2.views.freemarker.FreemarkerManager; import org.springframework.context.ApplicationContext; import org.springframework.web.context.support.WebApplicationContextUtils; import freemarker.template.Configuration; import freemarker.template.TemplateException; import freemarker.template.TemplateModel; public class StrutsFreemarkerManager extends FreemarkerManager { @Override protected Configuration createConfiguration(ServletContext servletContext) throws TemplateException { Configuration configuration = super.createConfiguration(servletContext); configuration.setTagSyntax(Configuration.AUTO_DETECT_TAG_SYNTAX); // 设置标签类型([]、<>),[]这种标记解析要快些 ApplicationContext applicationContext = WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext); // 取出上下文 Map<String, TemplateModel> beans = applicationContext.getBeansOfType(TemplateModel.class); // SpringContextHolder.getApplicationContext().getBeansOfType(TemplateDirectiveModel.class); // 获取实现TemplateDirectiveModel的bean for (Entry<String, TemplateModel> entry : beans.entrySet()) { if (entry.getValue() != null && entry.getValue() instanceof TemplateModel) { configuration.setSharedVariable(entry.getKey(), entry.getValue()); } } return configuration; } }
2:struts.properties
struts.freemarker.manager.classname=com.fangtoon.appcenterui.framework.struts2.StrutsFreemarkerManager
3:具体的自定义标签实现:
package com.fangtoon.appcenterui.framework.struts2.tag.method; import java.util.List; import java.util.Objects; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; import freemarker.template.TemplateMethodModel; import freemarker.template.TemplateModelException; @Component("dictItemName") public class DictItemNameTemplate implements TemplateMethodModel { private Logger logger = LoggerFactory.getLogger(getClass()); @Override @SuppressWarnings({ "rawtypes" }) public Object exec(List args) throws TemplateModelException { String dictCode = (String) args.get(0); String dictItemCode = (String) args.get(1); return dictCode + " - " + dictItemCode; } }
4:页面使用:
${dictItemName("APP_AUDIT_STATE","SUB_DICT_CODE")}
输出:
APP_AUDIT_STATE - SUB_DICT_CODE
5: 自定义有方法体标签:
package com.fangtoon.appcenterui.framework.struts2.tag; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.Map; import org.springframework.stereotype.Component; import freemarker.core.Environment; import freemarker.template.ObjectWrapper; import freemarker.template.TemplateDirectiveBody; import freemarker.template.TemplateDirectiveModel; import freemarker.template.TemplateException; import freemarker.template.TemplateModel; @Component("forloop") public class LoopsTemplateDirectiveModel implements TemplateDirectiveModel { @SuppressWarnings("rawtypes") public void execute(Environment environment, Map map, TemplateModel[] atemplatemodel, TemplateDirectiveBody templatedirectivebody) throws TemplateException, IOException { environment.setVariable("loops", ObjectWrapper.DEFAULT_WRAPPER.wrap(getLoops())); templatedirectivebody.render(environment.getOut()); } private List<String> getLoops() { List<String> list = new ArrayList<String>(); list.add("one"); list.add("two"); list.add("three") return list; } }
相关推荐
NULL 博文链接:https://renxin-327666062-qq-com.iteye.com/blog/1532731
一个用FTL定义的非常通用数据分页指令,有源码,有使用示例。使用效果图可以参看本人博客中的相关文章:http://blog.csdn.net/qjyong/archive/2009/10/18/4693142.aspx
众所周知,struts2宣称freemarker模板中不再支持自定义标签,但如果工程UI仅用freemarker模板可以通过扩展struts标签简单实现,不是采用官方不推荐的配置JspSupportServlet实现的!内付详细说明及范例,此方法仅为团队...
• 采用hibernate3+struts2+spring2+freemarker主流技术架构 • 懂html就能建站,提供最便利、合理的使用方式 • 强大、灵活的标签,用户自定义显示内容和显示方式 • 在设计上自身预先做了搜索引擎优化,增强对...
Struts2允许在页面中使用自定义组件,这完全能满足项目中页面显示复杂,多变的需求。 005 Struts2的标签库有一个巨大的改进之处,struts2标签库的标签不依赖于任何表现层技术,也就是说strtus2提供了大部分标签,...
5.7 Struts2自定义标签实现图形验证功能 121 第6章 Struts2非JSP视图技术 125 6.1 velocity视图技术使用介绍 125 6.2 freemarker视图技术使用介绍 128 6.3 JasperReports报表视图技术使用介绍 130 第7章 Struts2类型...
Struts2允许在页面中使用自定义组件,这完全能满足项目中页面显示复杂,多变的需求。 Struts2的标签库有一个巨大的改进之处,struts2标签库的标签不依赖于任何表现层技术,也就是说strtus2提供了大部分标签,可以在...
因为现在一般都用strut2,为了有很好的通用性,首先想到的自然是strut2的自定义标签。于是马上google一下。果然,一大堆。不过由于小弟资历浅薄,也没心思看,主要是strut2的标签本来我就觉得不大习惯,另外上个月...
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,也叫做...
该属性指定Struts 2应用加载用户自定义的属性文件,该自定义属性文件指定的属性不会覆盖struts.properties文件中指定的属性.如果需要加载多个自定义属性文件,多个自定义属性文件的文件名以英文逗号(,)隔开. struts....
采用hibernate3+struts2+spring2+freemarker主流技术架构 懂html就能建站,提供最便利、合理的使用方式 强大、灵活的标签,用户自定义显示内容和显示方式 在设计上自身预先做了搜索引擎优化,增强对搜索引擎的友好...
org.apache.struts2.views.freemarker.FreemarkerResult 16 httpheader 16 控制特殊http行为的结果类型 16 org.apache.struts2.dispatcher.HttpHeaderResult 16 stream 16 向浏览器发送InputSream对象,通常用来处理...
· 采用hibernate3+struts2+spring2+freemarker主流技术架构 · 懂html就能建站,提供最便利、合理的使用方式 · 强大、灵活的标签,用户自定义显示内容和显示方式 · 在设计上自身预先做了搜索引擎优化,增强对...
作者处处从实战出发,在丰富的示例中直观地探讨了许多实用的技术,如数据类型转换、文件上传和下载、提高Struts 2应用的安全性、调试与性能分析、FreeMarker、Velocity、Ajax,等等。跟随作者一道深入Struts 2,聆听...
开发人员还可以通过拦截器(可以自定义拦截器或者使用Struts2提供的拦截器)来对请求进行预处理和后处理,这样一来,处理请求就变得更加模块化,从而进一步减小耦合度。模块化是一个通用的主题——可以通过插件机制...
如数据类型转换、文件上传和下载、Struts2应用的安全性、调试与性能分析、FreeMarker、Velocily、Ajax,等等。跟随作者一道深入Struts2。聆听大量来之不易的经验之谈。你对Struts2开发框架的理解和应用水平都将更上...
JAVA模版引擎Freemarker常用标签(一) 1. if指令 这是一个典型的分支控制指令,该指令的作用完全类似于Java语言中的if,if指令的语法格式如下: <#if condition>... <#elseif condition>... <#elseif condition>......
自定义标签内容样式或使用系统提供的内容样式都非常方便。 ·尽量减少对第三方类库的依赖,减小发布包体积。 ·使用fckeditor代替原有编辑器。 ·文章内容不入库,减少数据库体积,程序运行效率更高。