首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

调整Freemarker的方法

2012-10-28 
整合Freemarker的方法最近小弟对Struts2.1.6中的Freemaker做了个初步的研究.在此和大家分享一下.Struts2.1

整合Freemarker的方法
最近小弟对Struts2.1.6中的Freemaker做了个初步的研究.在此和大家分享一下.
Struts2.1.6与Freemarker的整合方式有两种,即通过Freemarker中的模板技术和在struts2.1.6配置文件中的配置有关,两都的区别是比较大的,但是它们各有千秋,本人体会到了设计者的巧妙.

1,通过Freemarker中的模板(Template)来整合.
?????? Struts2.1.6的Action与前台的整合,无非是通过Action(基于Servlet)和struts2.1.6中的XML配置文件.该方法就是通过Action进行整合.
?????? 相关的例子代码如下:
??????

?
?????注意返回的Type类型不再是空了,应该是Freemarker,并且要在Result节点中配置一下模板文件的位置.
使用这种方法可以使用struts2.1.6中的所有标签,使用时应该做以下配置:
首先要把struts-tags.tld从struts2.1.6的核心JAR包拷贝出来,放在指定的目录.
在Web.xml文件中配置一下
?

注意:

这种方式的配置有可能会出现乱码,往往乱码问题是最令人头疼的.如果用标签取国际化中文件中的内容是没有问题的.但是在模板文件中的中文会出现乱码.

应该分为到下几步去查找原因:
1,看一下Spring2.0的编码过滤器配置.(Web.xml),并且要放在struts2.1.6的过滤器前面.(过滤器的顺序相当重要.可参见本人的其它文章)
2,struts2.1.6配置文件中的有没有配置相关的编码设置(可要可不要,)
3,看一下IDE开发工具中的模板文件的编码是不是和以上两步指定的编码是否一致,这一步是比较关键的.因为Ftl模板文件不在我们经常开发的文件名之内(.java,.properies,.jsp等),如果不一致,在该文件上右击,设置一下编码即可(本人就是因为这个问题郁闷了好久.呵呵,看来编码问题这个才是最重要的) <!--v:3.2--> 1 楼 jianfeng008cn 2009-06-01   需要这么麻烦吗? 2 楼 minjiaren 2009-06-01   有更简单和全面的方法吗?
请大家提出来共同进步,
谢谢! 3 楼 arantam 2010-04-27   你好,朋友.struts2的action配置里面已经有result type=freemarker的类型,也就是说这个时候是使用ftl来作为表示层,ftl模板里面不用添加标签声明就直接可以使用stust2的标签了吧? 因此也不必把那个struts-tag.tld复制出来了.

我想请教的是第一种方法,我的想法是直接使用template来生成静态页面,然后用jsp把那些静态页面include进去.但是我找了很久都没能解决一个freemarker的异常问题.
详细如下:

1.我首先是把struts-core-2.1.6.jar包里面那个struts-tag.tld复制到web-inf下(这时它会报标签有误),于是我在<tablib></taglib>外套一层<jsp-config></jsp-config>.好了.

2.在ftl头部声明引用刚才复制出来的那个标签文件.
<#assign s=JspTaglibs["/WEB-INF/struts-tags.tld"]>

3.在web.xml里面配置那个servlet(JspSupportServlet).

运行,报异常:
引用Expression JspTaglibs is undefined on line 1, column 12 in typeList.ftl.
The problematic instruction:
----------
==> assignment: s=JspTaglibs["/WEB-INF/struts-tags.tld"] [on line 1, column 1 in typeList.ftl]
----------

Java backtrace for programmers:
----------
freemarker.core.InvalidReferenceException: Expression JspTaglibs is undefined on line 1, column 12 in typeList.ftl.




请问你有没试过在使用第一种方法来生成静态文件,并且在ftl里面使用struts2.1.6的标签?

热点排行