`
herryhaixiao
  • 浏览: 90138 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

使用freemarker生成html

    博客分类:
  • java
阅读更多
由于freemarker这个技术很久很久就有了,注释我就没写得很详细了,相信大家都看得懂。下面就直接上代码以及一些代码上的解释了
ShowCourseView 类负责一些属性的封装,
public class ShowCourseView {
	
	private String name;
	private String courseCode;
	private String categoryName = null;
	
	public String getCategoryName() {
		return categoryName;
	}
	public void setCategoryName(String categoryName) {
		this.categoryName = categoryName;
	}
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
         public String getCourseCode() {
		return courseCode;
	}
	public void setCourseCode(String courseCode) {
		this.courseCode = courseCode;
	}
}
public class FreeMarkerTest {

	private Configuration config;

	public Configuration getConfig() {
		return config;
	}
	/**
	 * 注意:setEncoding这个方法一定要设置国家及其编码,不然在flt中的中文在生成html后会变成乱码
	 * @param filePath 文件路径
	 * @throws Exception
	 */
	public void init(String filePath) throws Exception {
		config = new Configuration();
		config.setDirectoryForTemplateLoading(new File(filePath));
		config.setEncoding(Locale.CHINA, "utf-8");
	}
	
/**
	 * 通过flt文件用html文件展示课程数据
	 * @param filePath flt文件路径
	 * @param templateFile flt模板文件
	 * @param list 要生成html的集合数据
	 * @param charset flt生成数据的编码格式
	 * @param htmlFile 通过flt生成html的文件
	 * @throws Exception
	 */
	public void showCourse(String filePath, String templateFile, List<ShowCourseView> list, String charset, String htmlFile) throws Exception {
		init(filePath);
		Map<String, Object> root = new HashMap<String, Object>();
		Template temp = getConfig().getTemplate(templateFile);
		root.put("courseList", list);
		Writer out=new OutputStreamWriter(new FileOutputStream(htmlFile), charset);
		temp.process(root, out);
	}
	public static void main(String[] args) throws Exception {
		FreeMarkerTest test = new FreeMarkerTest();
		ShowCourseView view1 = new ShowCourseView();
		view1.setCategoryName("categoryName1");
		view1.setCourseCode("code1");
		view1.setName("name1");
		
		ShowCourseView view2 = new ShowCourseView();
		view2.setCategoryName("categoryName2");
		view2.setCourseCode("code2");
		view2.setName("name2");
		ShowCourseView view3 = new ShowCourseView();
		view3.setCategoryName("categoryName3");
		view3.setCourseCode("code3");
		view3.setName("name3");
		List<ShowCourseView> list = new ArrayList<ShowCourseView>();
		list.add(view1);
		list.add(view2);
		list.add(view3);
		test.showCourse("E://jsp_eclipse3.2/shlll/WebContent/pages/template", "course.ftl", list, "utf-8", "course.html");
		}
}

下面就是模板文件course.flt
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
	</head>
	<body>
		<table border="0">
			<#list courseList as row>
				<tr>
					<td>
						<#if row.categoryName?exists>
							[<font color="red">${row.categoryName }</font>]
						</#if>
						<a href="/shlll/platform/course/CourseBrowse.do?courseCode=${row.courseCode}">${row.name}</a>
					</td>
				</tr>
			</#list>
		</table>	
		<div align="right">
			${showMore?default("更多...")} 		
		</div>	
	</body>
</html>

我就说下模板文件中用到的几个标签,一个是<#list>标签,用过struts2的人就知道在jsp中是有个list迭代标签的,这个和那个迭代标签大同小异,关键是这个语法不一样,在标签中有个“courseList”,这个courseList就是对应我在FreemarkerTest类中的showCourse方法中的Map中放置的一个key,而这个key又是一个List集合,通过这个list迭代出每一个CourseShowView对象;<#if>这个标签和自定义标签中的if标签性质是一样的,只是它的判断语法不同,?exists从翻译来讲,这个就是存在,加个问号表示是否存在,存在返回true,不存在返回false,row.categoryName?exists判断ShowCourseView中的categoryName是否有值,有值就显示categoryName,没有就不显示;其余的语法比如取值问题,对象取值问题,这个是大家关注的比较多的问题,取值怎么取呢,其实这个很简单,这个和EL表达式中的取值方法是一样的;${}这样就可以取值了;最后在<div>中有个函数,default这个是什么意思?我来给大家讲讲,表示showMore如果为空的话就显示default中的值。
     在flt文件中我有2个中文字体,这就是为什么我在FreeMarkerTest类中的init方法中,为什么要设置config的编码方式了。因为在生成html的时候,如果你没有配置config的编码方式,它就会用它默认的编码进行编码,所以导致你在html中看到的中文就会变成乱码了(这里指的乱码是指flt中的中文,不是后台生成的中文,切记)。
     好了,以上就是我研究freemarker用到的知识,欢迎各位拍砖,写的不好别见怪,写这个也是因为网上具体的代码不多,没有一个比较完整的,倒是对freemarker的说明还是蛮多的,当然我这个也是个比较简单的例子,如果需要加深了解,还是需要自己动手去写代码的,我只是给大家起一个引导的作用,(*^__^*) 嘻嘻……
    附件中是使用freemarker需要用的jar包。
分享到:
评论
2 楼 qepwqnp 2011-04-20  
楼主 course.ftl放在什么地方?
1 楼 glamey 2010-05-29  
呵呵,freemarker有很多有意料不到的事情,挺烦人的。

相关推荐

    使用FreeMarker生成Html静态文件

    标题“使用FreeMarker生成Html静态文件”暗示了我们将探讨如何利用FreeMarker将动态数据转化为静态的HTML页面。这一过程通常涉及以下几个步骤: 1. **配置FreeMarker**: 首先,我们需要在Java项目中引入FreeMarker...

    freeMarker生成html实用例子

    - `freemarker`目录下的例子可能包括基础的模板文件(如`template.ftl`)和对应的Java测试类,展示了如何使用FreeMarker生成HTML,你可以通过阅读这些例子了解具体用法。 总的来说,FreeMarker是Java Web开发中...

    Java中使用 FreeMarker 生成pdf盖章合同文件

    本篇文章将深入探讨如何在Java中使用FreeMarker生成带有盖章的PDF合同文件。 首先,让我们了解FreeMarker的基本概念。FreeMarker是一个基于模板的语言,它与Java代码分离,允许开发者用简单的模板语法来表示数据。...

    实用方便freemarker.jar freemarker架包 freemarker生成excel、word、html、xml例子

    2. 使用FreeMarker生成HTML: 在Web开发中,FreeMarker常用于生成动态HTML页面。首先,创建一个HTML模板,其中包含`${}`内的变量,这些变量将在运行时被Java对象的属性值替换。然后,创建一个Java类,设置需要的...

    springboot整合freemarker生成静态html的demo.zip

    总的来说,这个"springboot整合freemarker生成静态html的demo"项目展示了如何在SpringBoot应用中集成FreeMarker,以及如何通过模板和字符串两种方式生成HTML。这有助于我们构建更高效、更易于维护的Web应用,将视...

    freemarker+html生成pdf.zip

    `Freemarker`是一个强大的模板引擎,通常用于动态生成HTML、XML等文本格式,而将`Freemarker`与HTML模板结合生成PDF,可以充分利用HTML的易编辑性和富文本特性,为用户提供高质量的文档输出。下面我们将深入探讨如何...

    使用FreeMarker生成java代码

    FreeMarker是一个广泛使用的开源Java模板引擎,主要用于生成HTML、XML等Web内容,但也可以用于生成任何类型的文本,包括Java代码。这篇博客文章“使用FreeMarker生成java代码”深入探讨了如何利用FreeMarker来自动化...

    如何使用Freemarker生成java代码

    Freemarker是一个强大的模板引擎,常用于动态生成HTML、XML或其他文本格式的文件,比如在Java开发中,它被广泛应用于生成代码、邮件模板、报表等。本篇将详细介绍如何利用Freemarker来生成Java代码。 一、...

    freemarker生成xml示例

    Freemarker是一个强大的模板引擎,常用于Java应用中动态生成HTML、XML或其他文本格式的文件。这个示例是关于如何使用Freemarker来生成XML文件,对于初学者来说,理解这个过程有助于掌握Freemarker的基本用法和XML的...

    通过freemarker模板 生成PDF

    3. **处理模板**:使用Freemarker API的`Configuration`和`Template`类,将数据模型应用到模板上,生成HTML字符串。 4. **调用wkhtmltox**:通过Java绑定库,将生成的HTML字符串转换为PDF。 5. **保存PDF**:将生成...

    FreeMarker生成word文件

    以下是关于如何使用FreeMarker生成Word文件的一些关键知识点: 1. **FreeMarker模板语言**:FreeMarker使用一种简单的模板语言,允许开发者通过定义变量和控制结构(如循环和条件语句)来动态地插入数据。在模板中...

    java使用freemarker生成复杂的word文档

    Java中的Freemarker是一个强大的模板引擎,常用于生成动态HTML、XML或文本文件,而这里我们讨论的是如何利用Freemarker生成复杂的Word文档。在Java应用中,有时我们需要生成结构化且内容丰富的Word文档,例如报告、...

    freemarker生成复杂excel,带换行

    Freemarker是一个强大的模板引擎,常用于动态生成HTML、XML和其他文本格式的文件,包括Excel。在Java开发中,利用Freemarker生成Excel文件能够极大地提高效率,特别是处理复杂表格时,其灵活性尤为突出。本示例重点...

    利用FreeMarker生成word文件例子

    ### 使用FreeMarker生成Word文档 1. **配置FreeMarker**:首先,需要在项目中引入FreeMarker的依赖,例如通过Maven或Gradle添加对应的依赖库。然后,配置FreeMarker的环境,包括设置模板目录、缓存策略等。 2. **...

    freemarker生成静态html示例

    在这个Eclipse项目中,你可能需要创建一个Java类来提供数据模型,然后使用Freemarker API来加载模板文件,并结合数据模型生成HTML。这通常涉及到以下几个步骤: 1. 创建数据模型(如Java对象)。 2. 初始化...

    使用freemarker生成controller service impl pojo dao mapper

    FreeMarker 是一个强大的模板引擎,常用于生成动态HTML、XML或其他文本格式的文件。在Java Web开发中,它被广泛应用于自动生成代码,减少重复的手动编写工作,提高开发效率。本篇将深入探讨如何使用FreeMarker来生成...

    freemarker生成doc方案.pdf(内附代码下载地址)

    本知识点将详细介绍如何使用Freemarker生成doc和docx格式的Word文档,并提供相关的实现方案和过程中遇到的难点及解决办法。 首先,我们需要了解什么是Freemarker。Freemarker是一个基于Java的模板引擎,可以用来...

    SpringBoot+JPA+Freemarker 生成动态SQL

    结合SpringBoot和JPA,我们可以创建一个服务,该服务使用JPA的Repository接口与数据库进行交互,并通过Freemarker生成动态SQL。具体步骤如下: 1. **设置项目**:创建一个SpringBoot项目,添加Spring Data JPA和...

    simple-i18n-plugin:一个简单的插件,用于使用Freemarker生成html页面和模板的本地化版本

    简单的i18n插件一个简单的插件,用于使用Freemarker生成html页面和模板的本地化版本要使用它,请在本地构建它,然后将其添加到您的应用程序pom中: &lt; plugin&gt; &lt; groupId&gt;...${basedir}/src/main/webapp/pages/&lt;...

Global site tag (gtag.js) - Google Analytics