Spring和FreeMarker整合(实现自定义标签)

首先,关于版本,本地测试的版本分别为spring-framework-2.5.6.SEC01,FreeMarker 。

首先,是web.xml的配置:

 



  	
  
  
  	dispatcher
  	org.springframework.web.servlet.DispatcherServlet
  	1
  
  
  	dispatcher
  	/*
  
  
    index.jsp
  


 没什么说的,都是规范。

 

其次,是dispatcher-servlet.xml的配置:

 


	
	
	
	
		
		
		
		
		
		
	
	
	
		
		
			
				
			
		
		
		
			
				auto_detect
				5
				UTF-8
				UTF-8
				zh_CN
				true,false
				yyyy-MM-dd HH:mm:ss
				yyyy-MM-dd
				HH:mm:ss
				0.######
				true
			
		
	
	
	
	

 接下来是自定义标签的指向类:

 

package com.yuxinglab.directive;

import java.io.IOException;
import java.io.Writer;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import static freemarker.template.ObjectWrapper.DEFAULT_WRAPPER;
import org.springframework.web.servlet.view.AbstractTemplateView;

import com.yuxinglab.domain.Content;

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

public class TestDirective implements TemplateDirectiveModel{

	public void execute(Environment env, Map params, 
			TemplateModel[] loopVars, TemplateDirectiveBody body) 
					throws TemplateException, IOException {
		ArrayList contentList=new ArrayList();
		Content con1=new Content("标题1", "此处无声胜有声1");
		Content con2=new Content("标题2", "此处无声胜有声2");
		Content con3=new Content("标题3", "此处无声胜有声3");
		Content con4=new Content("标题4", "此处无声胜有声4");
		contentList.add(con1);
		contentList.add(con2);
		contentList.add(con3);
		contentList.add(con4);
		Map paramWrap=new HashMap();
		paramWrap.put("tag_list", DEFAULT_WRAPPER.wrap(contentList));
		Set> entrySet = paramWrap.entrySet();
		String key;
		TemplateModel value;
		for (Map.Entry entry : entrySet) {
			key = entry.getKey();
			value = env.getVariable(key);
			if (value != null) {
			}
			env.setVariable(key, entry.getValue());
		}
		body.render(env.getOut());
	}

}

 接下来是模板的配置:

<#if content_list?exists>
标题内容
<#list content_list as c>
	${c.title}${c.content}

仅实现了功能,没有做任何的异常处理和封装。仅供参考。

 

你可能感兴趣的:(Spring和FreeMarker整合(实现自定义标签))