文档章节

SSH 项目 Freemarker自定义标签配置使用

郭恩洲_OSC博客
 郭恩洲_OSC博客
发布于 2014/09/12 21:02
字数 380
阅读 87
收藏 1

1.spring 配置 Freemarker

     struts 对Freemarker封装有点深,很多Freemarker自定义配置需要再资源配置文件中配置


<!-- 配置freemarkerManager -->
<bean id="freemarkerManager" class="org.apache.struts2.views.freemarker.FreemarkerManager" />


classic_compatible=true 
whitespace_stripping=true 
template_update_delay=0 
locale=zh_CN 
default_encoding=utf-8 
url_escaping_charset=utf-8 
date_format=yyyy-MM-dd 
time_format=HH:mm:Ss 
datetime_format=yyyy-MM-dd 
number_format=\#0.\#\#\#\#\# #
template_exception_handler=ignore


2.Spring 定义初始自定义标签类

<bean id="xInitializing" class="net.shopxx.common.Initializing">
	</bean>



初始标签类 cms_article_list  cms_timeConvert
package net.shopxx.common;
import javax.annotation.Resource;
import javax.servlet.ServletContext;

import net.shopxx.constant.JdbcConstant;
import net.shopxx.tag.ArticleListDirective;
import net.shopxx.tag.TimeConvetDirective;

import org.apache.struts2.views.freemarker.FreemarkerManager;
import org.springframework.beans.factory.InitializingBean;

import freemarker.template.Configuration;



public class Initializing implements InitializingBean {
	

	
	@Resource
	private ServletContext servletContext;
	
	@Resource
	private FreemarkerManager freemarkerManager;

	@Override
	public void afterPropertiesSet() throws Exception {

		
		Configuration configuration = freemarkerManager.getConfiguration(servletContext);
		configuration.setSharedVariable("devModel", JdbcConstant.DEVMODEL);
		configuration.setSharedVariable("cms_article_list", new ArticleListDirective());
		configuration.setSharedVariable("cms_timeConvert", new TimeConvetDirective());

		
	}
}



3.编写自定义标签类 

cms_article_list  cms_timeConvert

package net.shopxx.tag;

import java.io.IOException;
import java.io.Writer;
import java.util.Map;

import freemarker.core.Environment;
import freemarker.template.TemplateDirectiveBody;
import freemarker.template.TemplateDirectiveModel;
import freemarker.template.TemplateException;
import freemarker.template.TemplateModel;

public class TimeConvetDirective implements TemplateDirectiveModel {

	@Override
	public void execute(Environment env, Map params, TemplateModel[] loopVars,
			TemplateDirectiveBody body) throws TemplateException, IOException {
		Writer out = env.getOut();
		TemplateModel paramValue = (TemplateModel) params.get("title");
		//使用h1标签包装title值
		out.write("<h1>" + paramValue.toString() + "</h1>");
		//如果标签中有内容
		if (body != null) {
			body.render(env.getOut());
		} else {
			//如果标签中没有内容
			//throw new RuntimeException("标签内部至少要加一个空格");
		}
		
	}

}



cms_article_list  

package net.shopxx.tag;

import static freemarker.template.ObjectWrapper.DEFAULT_WRAPPER;

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import freemarker.core.Environment;
import freemarker.template.TemplateDirectiveBody;
import freemarker.template.TemplateDirectiveModel;
import freemarker.template.TemplateException;
import freemarker.template.TemplateModel;

public class ArticleListDirective implements TemplateDirectiveModel {

	@Override
	public void execute(Environment env, Map params, TemplateModel[] loopVars,
			TemplateDirectiveBody body) throws TemplateException, IOException {
		List<String> list = new ArrayList<String>();
		if (params.containsKey("parent_id") && params.get("parent_id") != null) {
			list.add("a");
			list.add("b");
			list.add("c");
		} else {
			list.add("1");
			list.add("2");
			list.add("3");
		}
		
		env.setVariable("article_list", DEFAULT_WRAPPER.wrap(list));
		body.render(env.getOut());

	}

}



4.页面使用自定义标签

<!--s 尾部-->	
		<#assign name="dfdsdfsdf">
		
		<@cms_timeConvert title="${name}"/>
	
		<@cms_article_list>
			<#if article_list??>
				<#list article_list as bean>
					${bean}
				</#list>
			<#else>
			   NOT DATA
			</#if>
		</@cms_article_list>
		
		<!--e 尾部-->



© 著作权归作者所有

郭恩洲_OSC博客
粉丝 37
博文 256
码字总数 118046
作品 0
徐汇
高级程序员
私信 提问
jfinal下超爽的freemarker自定义标签,web开发的利器

为什么采用freemarker? 1、模板技术,不依附于语言和框架,前端和后端解耦,便于分工协作,更好的协同。 2、页面相应速度快 3、前端非常的灵活,采用自定义标签可以在不更改后端的基础上很容...

菜根乱谭
2012/11/27
8.1K
16
在Spring+FreeMarker框架中使用Shiro的Tag标签

目前Freemarker对Shrio的标签还不支持,不过已经有人贡献出来第三方面解决方案,如下: 1、下载shiro-freemarker-tags GitHub地址:https://github.com/jagregory/shiro-freemarker-tags 可以...

zkool
2014/01/19
7.9K
0
求教Freemarker模板解析性能优化方面的问题

最近SSH项目中使用FreeMarker做模板解析,将大部分HTML组件进行了封装,模版页面基本上使用封装后的标签编写,经过20天做前期模型的体验,开发效率加快了很多,但是我担心的是基于封装后的标...

山东-小木
2012/12/17
2.2K
1
Spring Boot 最佳实践(三)模板引擎FreeMarker集成

一、FreeMaker介绍 FreeMarker是一款免费的Java模板引擎,是一种基于模板和数据生成文本(HMLT、电子邮件、配置文件、源代码等)的工具,它不是面向最终用户的,而是一款程序员使用的组件。 ...

王磊
2018/08/31
0
0
Intellij Idea 使用日常记录

作者使用的Idea版本: 1.去除Mybatis Mapper Xml文件中Sql语句块绿色背景 问题描述:idea中使用mybatis开发,mapper的xml中SQL语句快背景是绿色的,看起来很不舒服,如下图所示: 解决办法:...

MaxBill
2018/08/24
110
0

没有更多内容

加载失败,请刷新页面

加载更多

MySQL左连接问题,右表做筛选,左表列依然在

两张表,一张user表,一张user_log表 CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(20) DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB DEFA......

bengozhong
25分钟前
5
0
重新开始学Java——多线程基础

多线程 进程 主流计算机操作系统都支持同时运行多个任务 , 每个任务通常就是一个程序 , 每个运行中的程序就是一个进程或者多个进程 。 进程的特点 独立性 进程是系统中独立存在的实体 可以...

大家都是低调来的
26分钟前
7
0
注解在Java中是如何工作的?

> 来一点咖啡,准备好进入注解的世界。 注解一直是 Java 的一个非常重要的部分,它从 J2SE 5.0 开始就已经存在了。在我们的应用程序代码中,经常看到 @Override 和 @Deprecated 这样的注解。...

liululee
29分钟前
17
0
Docker 容器连接

Docker 容器连接 容器间的链接有两种方法,你选择其一即可 网络端口映射 docker run -d -P docker run -d -p-P :是容器内部端口随机映射到主机的高端口。-p : 是容器内部端口绑定到指定...

测者陈磊
31分钟前
8
0
车载导航应用中基于Sketch UI主题定制方案的实现

1.导读 关于应用的主题定制,相信大家或多或少都有接触,基本上,实现思路可以分为两类: 内置主题(应用内自定义style) 外部加载方式(资源apk形式、压缩资源、插件等) 其实,针对不同的主题...

阿里云官方博客
37分钟前
11
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部