在WEB程序中使用FreeMarker心得

今天做了Struts2、Hibernate3、Spring2、FreeMarker的框架整合程序。

按照网上找的相关资料去做的程序报错了,因为是第一次用FreeMarker,所以没有经验,网上说只要把Struts2的核心jar包里的struts-tags.tld放在WEB-INF目录下,在*.ftl页面里做<#assigns=JspTaglibs["/WEB-INF/struts-tags.tld"]/>这样的引用就可以,可我的程序却报了

exception:freemarker.template.TemplateModelException:Couldnotloadtaglibinformation,

rootcause:java.lang.ClassNotFoundException:org.apache.struts2.views.jsp.ui.AutocompleterTag

这个异常,后来又看了看Struts2里的关于FreeMarker的API和在网上搜索的FreeMarker的相关资料,最后才跑通的,源代码引用如下:

*.ftl页面需要引用的源代码:

<#assignpage=JspTaglibs["http://www.opensymphony.com/sitemesh/page"]>

<#assigns=JspTaglibs["/struts-tags"]/>

<html>

<head>

<title>注册页面</title>

</head>

<body>

<@s.formmethod="post"name="inputform"action="register.action!register">

<@s.textfieldlabel="用户名"name="username"/>

<@s.passwordlabel="密码"name="password"/>

<@s.textfieldlabel="出生日期"name="birthday"/>

<@s.submitvalue="注册"align="left"/>

</@s.form>

</body>

</html>

但我的WEB程序第一访问页面仍然是jsp页面,因为FreeMarker只能用action跳转的方式才能被访问,因为jsp页面的访问速度比ftl页面的访问速度慢,所以我建议第一访问页面也用ftl,这时问题又出现了,如果我们像访问jsp页面那样直接访问ftl页面的话,页面会显示ftl语言的源代码,而不是我们要的效果,在struts2-core-2.0.0.jar的版本里有一个org.apache.struts2.views.freemarker.FreeMarkerServlet这个类,这个类在后期的新版本中被删掉了,要想使用这个类就需要我们自己从新把那个类打包到新版本中,在web.xml中还要做相应的配置代码,配置代码如下:

<servlet>

<servlet-name>freemarker</servlet-name>

<servlet-class>org.apache.struts2.views.freemarker.FreemarkerServlet</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>freemarker</servlet-name>

<url-pattern>*.ftl</url-pattern>

</servlet-mapping>

相关推荐