Freemarker2.3.23整合Spring

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.myproject.freemarker</groupId>
  <artifactId>Projectfreemarker</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>Projectfreemarker</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
    </dependency>
    <dependency>
	    <groupId>org.freemarker</groupId>
	    <artifactId>freemarker</artifactId>
	    <version>2.3.23</version>
	</dependency>
	<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
	<dependency>
	    <groupId>org.springframework</groupId>
	    <artifactId>spring-context</artifactId>
	    <version>4.3.1.RELEASE</version>
	</dependency>
	<!-- https://mvnrepository.com/artifact/org.springframework/spring-web -->
	<dependency>
	    <groupId>org.springframework</groupId>
	    <artifactId>spring-web</artifactId>
	    <version>4.3.0.RELEASE</version>
	</dependency>
	<!-- https://mvnrepository.com/artifact/org.springframework/spring -->
	<dependency>
	    <groupId>org.springframework</groupId>
	    <artifactId>spring</artifactId>
	    <version>2.5.6</version>
	</dependency>
	
	<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
	<dependency>
	    <groupId>org.springframework</groupId>
	    <artifactId>spring-webmvc</artifactId>
	    <version>4.3.1.RELEASE</version>
	</dependency>
    <!-- https://mvnrepository.com/artifact/org.springframework/spring-test -->
	<dependency>
	    <groupId>org.springframework</groupId>
	    <artifactId>spring-test</artifactId>
	    <version>3.2.12.RELEASE</version>
	</dependency>
	<!-- servlet -->
	<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
	<dependency>
	    <groupId>javax.servlet</groupId>
	    <artifactId>javax.servlet-api</artifactId>
	    <version>3.1.0</version>
	</dependency>

  </dependencies>
</project>

applicationContextTest.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="  
             http://www.springframework.org/schema/beans  
             http://www.springframework.org/schema/beans/spring-beans.xsd
             http://www.springframework.org/schema/context  
             http://www.springframework.org/schema/context/spring-context-2.5.xsd">  
	<!-- 自動掃描包 -->
    <context:component-scan base-package="com.spring.freemarker" />
	<!-- 配置freeMarker的模板路徑 -->
	<bean id="freeMarkerConfigurer"
		class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
		<!--property name="freemarkerSettings" ref="freemarkerConfiguration"/ -->
		<property name="templateLoaderPath">
			<value>classpath:/freemarker</value>
		</property>
		<property name="freemarkerSettings"><!-- 設置FreeMarker環境屬性-->   
          <props>  
              <!--<prop key="template_update_delay">1800</prop>刷新模板的週期,單位爲秒-->   
              <prop key="default_encoding">UTF-8</prop><!--模板的編碼格式 -->  
              <prop key="locale">zh_CN</prop><!-- 本地化設置-->  
          </props>  
      </property>    
	</bean>
    <bean id="FreeMarkerController" class="com.myprobject.controller.imp.FreeMarkerControllerImp"/>
</beans>

FreeMarkerController.java

package com.myprobject.controller;

import java.util.Map;
public interface FreeMarkerController {
	public String getProductionFile(Map<String,Object> freemarkerData,String templateName);
}

FreeMarkerControllerImp.java

package com.myprobject.controller.imp;

import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.ui.freemarker.FreeMarkerTemplateUtils;
import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer;

import com.myprobject.controller.FreeMarkerController;

import freemarker.template.Template;

public class FreeMarkerControllerImp implements FreeMarkerController{
	//FreeMarker
	@Autowired
	private FreeMarkerConfigurer freeMarkerConfigurer;
	/**
	 * 生成java文件
	 *  freemarkerData 數據源  
	 * templateName 模板名稱
	 * 
	 */
	public String getProductionFile(Map<String, Object> freemarkerData,
			String templateName) {
		// TODO Auto-generated method stub
		  String freemarkerText="";    
          try {    
              //經過指定模板名獲取FreeMarker模板實例    
              Template tpl=freeMarkerConfigurer.getConfiguration().getTemplate(templateName);    
              freemarkerText=FreeMarkerTemplateUtils.processTemplateIntoString(tpl,freemarkerData);
          } catch (Exception e) {    
              e.printStackTrace();    
          }    
          return freemarkerText;    
	}    

	public FreeMarkerConfigurer getFreeMarkerConfigurer() {
		return freeMarkerConfigurer;
	}

	public void setFreeMarkerConfigurer(FreeMarkerConfigurer freeMarkerConfigurer) {
		this.freeMarkerConfigurer = freeMarkerConfigurer;
	}
	
}

JavaServerTemplate.ftl

package com.myprobject.service;  
  
public class ${class} {  
  
  <#list properties as prop>  
    private ${prop.type} ${prop.name};  
  </#list>  
  
  <#list properties as prop>  
    public ${prop.type} get${prop.name?cap_first}(){  
      return ${prop.name};  
    }  
    public void set${prop.name?cap_first}(${prop.type} ${prop.name}){  
      this.${prop.name} = ${prop.name};  
    }  
  </#list>  
  
  
}

TestFreemarker.java

package com.myprobject.test;

import java.io.File;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import com.myprobject.controller.FreeMarkerController;

import freemarker.template.Configuration;
import freemarker.template.DefaultObjectWrapper;
import freemarker.template.Template;
import freemarker.template.TemplateException;
@RunWith(SpringJUnit4ClassRunner.class)
ContextConfiguration(locations = {"classpath:applicationContextTest.xml"})(前面加個@不知道爲何寫了@符號markdown保存不了)
public class TestFreemarker {
	@Autowired
	public FreeMarkerController freeMarkerController;
	@Test
	public void testFreeMarker(){

 
    	Map<String, Object> root = new HashMap<String, Object>();  
    	root.put("class", "F32B");  
    	Collection<Map<String, String>> properties = new HashSet<Map<String, String>>();  
    	root.put("properties", properties);  
    	
    
    	Map<String, String> currency = new HashMap<String, String>();  
    	currency.put("name", "currency");  
    	currency.put("type", "String");  
    	properties.add(currency);  
    	
    
    	Map<String, String> amount = new HashMap<String, String>();  
    	amount.put("name", "amount");  
    	amount.put("type", "Double");  
    	properties.add(amount);
	
	System.out.println(freeMarkerController.getProductionFile(root, "JavaServerTemplate.ftl"));
	}
	public FreeMarkerController getFreeMarkerController() {
	    return freeMarkerController;
	}

	public void setFreeMarkerController(FreeMarkerController freeMarkerController) {
	     this.freeMarkerController = freeMarkerController;
	}

}
相關文章
相關標籤/搜索