在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>