`

初试FreeMarker模板的一些问题

 
阅读更多



一:freemarker编辑器的安装

freeM a rker模板IDE作为MyEclipse的插件用来编辑ftl文件,具有语法高亮的作用,安装的方式一是采用MyEclipse的help选项下的softWare update,指定url地址,来自动完成插件的下载和安装,安装后会提示重启,在测试的过程中myEclips6.6中提示报错,大致意思是说连接问题,但在eclipse在线安装过程中未出现任何状况,所以采用手动安装的方式,

 

二:freemarker-jar包的使用

hudson.freemarker_ide_0.9.14下修改配置以及导入指定的freemarkerjar包

,因为freemarker-ide下的第三方jar版本过低,这时需要下载新的版本,覆盖原先的jar,在freemar-ide ----C:\Users\Administrator\Desktop\freemarker-ide-0.9.14\plugins\hudson.freemarker_ide_0.9.14\META-INF\MANIFEST.MF文件进行修改。

=========================================================

MANIFEST.MF

org.eclipse.jdt.ui
Eclipse-AutoStart: true
Bundle-ClassPath: freemarker-2.3.6.jar,

Bunle-ClassPath:指定覆盖后的jar

 

 

三:freeMarker的一些问题

1.strut2对freeMarker支持,在struts2.0版本中,查看包结构

views\freemarker下即是struts2对freemarker支持的源文件,但strut2.0版本的还有个FreemarkerServlet.java文件,见附件。


freemarkerServlet继承(extends HttpServlet),也就是一个servlet,所以它会对ftl模板文件进行拦截做些处理,所以在web.xml文件中,会配置一下freemarkerServlet,

<servlet>  
   <servlet-name>FreemarkerServlet</servlet-name>  
 <servletclass>org.apache.struts2.views.freemarker.FreemarkerServlet</servlet-class>  
</servlet>  
 
<servlet-mapping>  
<servlet-name>FreemarkerServlet</servlet-name>  
<url-pattern>/servlet/FreemarkerServlet</url-pattern>  
</servlet-mapping>  

但运行时,会出现一下异常:

javax.servlet.ServletException: Servlet.init() for servlet freemarker threw exception
         org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
         org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
         org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
         org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
         org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
         java.lang.Thread.run(Thread.java:619)
 

root cause 

java.lang.NullPointerException
         org.apache.struts2.views.freemarker.FreemarkerServlet.createConfiguration(FreemarkerServlet.java:76)
         org.apache.struts2.views.freemarker.FreemarkerServlet.init(FreemarkerServlet.java:54)
         javax.servlet.GenericServlet.init(GenericServlet.java:212)
         org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
         org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
         org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
         org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
         org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
         java.lang.Thread.run(Thread.java:619)

2.关于freemarker调用struts标签的问题

在ftl文件中,如要使用strut2的标签库就要复制,struts包的标签到指定的目录下,建立对其的引用。

<#assign s=JspTaglibs["/WEB-INF/struts-tags.tld"]> //struts-tag.tld复制到了WEB-INF下

<html>
	<head><title>Struts2 FreeMarker</title></head>
	<body>
		<@s.form action="login.action">
			<@s.textfield name="uid" label="USRNAME"/>
			<@s.textfield name="password" label="PASSWORD"/>
			<@s.submit value="login"/>
		</@s.form>
	</body>
</html>

但是在我使用的时候并没有达到页面显示的内容,也许前面的问题和这个问题是环环相扣的。

3, ide对<@s.textfield>标签的提示并没有表现出来,也只有${}这样的标识也予以提示.

 

四:加载模板文件(templates)的几种方式

1,通过setClassForTemplateLoading()方式,参数一,指定当前类,参数二:ftl文件所在文件。前提是当前类是ftl所在目录的父目录。

configuration.setClassForTemplateLoading(FreeMarkerManager.class,"templates");

2.通过configuration.setServletContextForTemplateLoading(getServletContext(),
"\\template"),其中第一参数是应用上下文,第二个参数是相对于classpath的ftl所在的目录。

 

3.通过configuration.setDirectoryForTemplateLoading(new File("templates")),newFile()文件与src是同级目录。


五:sturt2和freemaker

因为以上问题,所以在示例中并没有采用调用struts2标签的方式来进行页面类似输入框的显示,只执行简单的struts2和freemaker数据交互的过程,示例如下。

public class LoginAction extends ActionSupport implements ServletRequestAware,
		ServletResponseAware, ServletContextAware {
	private HttpServletRequest request;
	@SuppressWarnings("unused")
	private HttpServletResponse response;
	private ServletContext servletContext;

	public void setServletRequest(HttpServletRequest request) {
		this.request = request;
	}

	public void setServletResponse(HttpServletResponse response) {
		this.response = response;
	}

	@SuppressWarnings("unchecked")
	public String Login() throws IOException, TemplateException {
		Configuration configuration = new Configuration();
		configuration.setServletContextForTemplateLoading(getServletContext(),
				"\\template");

		configuration.setObjectWrapper(new DefaultObjectWrapper()); // 设置默认的对象包装器
		configuration.setTemplateExceptionHandler(TemplateExceptionHandler
                                                                                             .IGNORE_HANDLER);// 设置异常处理器

		Map map = new HashMap();
		map.put("name", "zhangsan");
		map.put("password", "123");

		try {
			Writer out = response.getWriter();
			Template template = configuration.getTemplate("login.ftl");
			response.setContentType("text/html;charset="
					+ template.getEncoding());
			template.process(map, out);
			out.close();
		} catch (TemplateException e) {

	       }

		return SUCCESS;

	}

	public void setServletContext(ServletContext servletContext) {
		this.servletContext = servletContext;

	}

	public ServletContext getServletContext() {
		return servletContext;
	}

}

struts.xml配置

<struts>
	<package namespace="/free" name="free" extends="struts-default">
		<action name="LoginAction_*"
			class="cn.spring.action.LoginAction" method="{1}">
			<result>/template/login.ftl</result>
		</action>
	</package>
</struts>

login.ftl

<html>
<body>
<form action="">
	username:<input type="text" name="username" value="${name}"/>
	password:<input type="text" name="password" value="${password}"/>
</form>
</body>
</html>

地址栏输入:http://localhost:8080/freeMark/free/LoginAction_Login.action,显示页面如下

 

  • 大小: 7.1 KB
  • 大小: 38.1 KB
  • 大小: 25.2 KB
  • 大小: 12.8 KB
  • 大小: 1.1 KB
分享到:
评论

相关推荐

    Freemarker模板生成pdf+java

    Freemarker模板生成pdf+javaFreemarker模板生成pdf+javaFreemarker模板生成pdf+javaFreemarker模板生成pdf+javaFreemarker模板生成pdf+java

    freemarker模板技术生成复杂word文档---解决了编码问题

    大致的思路是先用office2003或者2007编辑好word的样式,然后另存为xml,将xml翻译为FreeMarker模板,最后用java来解析FreeMarker模板并输出‘.doc’ word文档。经测试这样方式生成的word文档完全符合office标准,...

    freeMarker模板文件附件.zip

    这个“freeMarker模板文件附件.zip”压缩包包含了一些关键资源,便于学习者深入理解并实践FreeMarker模板语言的用法。 1. **FreeMarker模板语言基础** FreeMarker是基于模板的,它与Java代码分离,使得视图层的...

    SpringBoot使用FreeMarker模板发送邮件

    通过springboot 整合freemarker模板引擎,自动发送html格式邮件

    通过freemarker模板 生成PDF

    本主题将深入探讨如何利用Freemarker模板和wkhtmltox工具来实现这一功能。 **Freemarker模板** 是一个强大的Java模板引擎,用于动态生成文本输出,如HTML、XML或PDF。它支持变量替换、控制结构(如if/else)和复杂...

    java使用freemarker模板技术导出word

    Java 使用 FreeMarker 模板技术导出 Word 是一种常见的数据动态生成文档的方法,它结合了 Java 的编程能力和 FreeMarker 模板引擎的强大功能,能够帮助开发者高效地生成结构化的 Word 文档。FreeMarker 是一个开源的...

    基于Freemarker模板的代码生成器工具

    本篇将重点介绍一款名为“基于Freemarker模板的代码生成器工具”,这是一款纯Java实现的工具,利用了Freemarker模板引擎的强大功能。 **一、Freemarker模板引擎** Freemarker是一个开源的模板语言,用于生成动态...

    FreeMarker模板设计指南

    FreeMarker概述 FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写 FreeMarker被设计用来生成HTML Web页面,特别是基于MVC模式的应用程序 虽然FreeMarker具有一些编程的能力...

    利用freemarker 模板生成pdf ,利用easypoi 生成excel(带图片,水印,分页)

    本主题将探讨如何利用Freemarker模板生成PDF以及如何使用EasyPOI生成带有图片、水印和分页功能的Excel。 首先,让我们深入了解Freemarker。Freemarker是一个强大的模板引擎,它用于生成文本输出,如HTML、XML或PDF...

    可视化div布局 生成freemarker模板

    本话题主要探讨的是如何利用可视化div布局来生成FreeMarker模板,并结合Spring MVC 3框架进行应用。下面将详细阐述这些概念及其相关知识点。 1. **FreeMarker模板引擎**:FreeMarker是一个开源的Java模板引擎,它...

    FreeMarker模板基本语法

    ### FreeMarker模板基本语法 #### 一、FreeMarker概述与基本用法 **FreeMarker**是一种强大的、基于Java的模板引擎,主要用于动态生成HTML页面,但也支持其他类型的文本格式(如XML、JavaScript、电子邮件等)。它...

    使用freeMarker模板和Spring boot后端API接口实现查询用户列表的功能。

    在本项目中,我们将利用FreeMarker模板语言和Spring Boot后端API接口来实现一个用户列表的查询功能。下面,我将详细讲解这个过程中的关键知识点。 1. **FreeMarker模板**: FreeMarker是一个Java模板引擎,它能够...

    java通过freemarker模板导出word含图片

    本示例关注的是如何使用FreeMarker模板引擎来实现这个功能,并且包含在Word文档中插入图片的能力。FreeMarker是一个强大的、轻量级的模板语言,常用于Java应用中的视图层渲染。 首先,理解FreeMarker的基本概念。...

    Java freemarker 模板生成word动态表格

    Java FreeMarker 模板生成Word动态表格是一种在Java开发中常用的技术,用于生成基于模板的复杂文档,特别是当需要创建包含动态数据的Word表格时。FreeMarker是一个强大的模板引擎,它与Java代码分离,允许开发者使用...

    FreeMarker模板语言API

    - `TemplateException`:FreeMarker在处理模板时抛出的异常,通常由语法错误或数据模型问题引起。 - `TemplateProcessingException`:在模板处理过程中发生的异常,通常涉及数据模型的访问。 6. **最佳实践** - ...

    Java利用Freemarker模板自动生成dto、dao、rowmapper、bo、service代码

    本主题涉及的核心技术是使用Freemarker模板引擎来生成DTO(Data Transfer Object)、DAO(Data Access Object)、RowMapper、BO(Business Object)和服务层代码。这些组件在Spring框架中扮演着重要角色。 1. **...

    基于itext7+freemarker模板导出pdf

    本教程将探讨如何使用iText7和FreeMarker库结合,来创建一个基于模板的PDF生成流程,确保中文支持和图片的正常显示。 首先,iText7是一款强大的Java库,专门用于生成和操作PDF文档。它提供了丰富的API,可以方便地...

    freemarker模板使用

    在这个"freemarker模板使用"的讨论中,我们将深入探讨Freemarker的核心概念、语法以及如何在实际项目中进行图片插入。 1. **核心概念**: - **模板(Template)**:Freemarker模板是包含固定文本和变量的文本文件...

    freemarker模板引擎

    Freemarker是一个强大的、开源的模板引擎,主要应用于Java平台,用于生成动态内容。它的工作原理是将设计人员创建的HTML或XML模板与由程序员提供的数据模型相结合,生成最终的HTML或其他格式的输出。这对于Web开发中...

Global site tag (gtag.js) - Google Analytics