java freemarkerWord文档下载推荐.docx
《java freemarkerWord文档下载推荐.docx》由会员分享,可在线阅读,更多相关《java freemarkerWord文档下载推荐.docx(16页珍藏版)》请在冰豆网上搜索。
filter-mapping>
url-parttern>
/*<
/url-parttern>
/filter-mapping>
注意:
对于网络上所说的要想在Freemarker中使用Struts2标签必须配置一个新SERVLET
servlet>
servlet-name>
JspSupportServlet<
/servlet-name>
servlet-class>
org.apache.struts2.views.JspSupportServlet
/servlet-class>
load-on-startup>
1<
/load-on-startup>
/servlet>
在本人的实践中发现这步并非必须的,此处有待深入研究
4、接下来这步应该是最重要的,配置struts.xml文件
actionname="
getVediosByCategory"
class="
com.wang.vedio.action.IndexAction"
method="
>
resultname="
success"
/secondPage.jsp<
/result>
/action>
以上ACTIN配置为正常使用STRUTS2的配置,但在结合FREEMARKER中则需做如下改变
type="
freemarker"
/WEB-INF/template/secondPage.ftl<
reslutl>
元素的type属性必须设置为freemarker,这是因为Freemarker模板文件必须由Freemarker模板引擎来解析,而Struts2内部实现了Freemarker模板引擎,但我们必须声明返回结果类型为freemarker才可以
经过以上四步,STRUTS2+FREEMARKER配置完成,可以进行开发应用,下面展示一个简单的实例
IndexAction.java
……
privateLoglog=LogFactory.getLog(IndexAction.class);
privateStringusername;
privateStringpassword;
/**
*登录处理
*@return
*@throwsException
*/
publicStringgetVediosByCategory()throwsException{
log.info("
执行了登录方法getVediosByCategory()"
);
returnSUCCESS;
}
省略相应(getter,setter方法)
…
创建登录页面index.jsp
s:
formaction="
登录名:
textfieldname="
username"
/>
br>
密码:
password"
submitvalue="
登录"
/>
/s:
form>
创建结果页面:
user.ftl
#--
#assigns=JspTaglibs["
/WEB-INF/struts-tags.tld"
]>
-->
html>
body>
欢迎<
@s.propertyvalue="
登录!
/body>
/html>
1、Struts2标签在JSP页面中的写法与在Freemarker模板文件中的写法不同。
Freemarker模板文件是以<
@s.tag>
开始,以<
/@s.tag>
结束
2、Freemarker模板文件的处理,通过Web容器是无法直接处理的,因此不要让用户直接访问模板文件。
在开发过程中,我们可以将Freemarker文件直接放到Web工程的WEB-INF目录或其子目录下(用户无法访问WEB-INF目录下文件),并在相应的struts-*.xml文件中配置type="freemarker"来输出模板
FREEMARKER接触不深,如有不足之处请大虾们多多指正
(二)资料编号NO102
FreeMarker也是与Web容器无关的,也就是FreeMarker并不一定需要运行在Web容器中:
FreeMarker同样可以应用于非Web应用程序环境.而且,FreeMarker并不是只能生成HTML页面,它也可以生成各种文本,如XML,RTF,Java源代码等。
Struts2默认采用FreeMarker作为其模板文件,而Struts2所有的主题模板文件都是采用FreeMarker编写的,eclipse中的JSP,Java等模板文件也是采用FreeMarker技术.
一、在struts2中使用freemarker
以一个简单的添加用户信息为例:
当用户点击首页中的“添加用户”连接时,这时会发出一个添加用户页面的请求(addInput.action),然后通过我们的返回一个添加页面,下面是我们普通的struts2配置文件一般是这么配置的:
addInput"
com.freemarker.action.UserAction"
result>
/addInput.jsp<
addInput.jsp文件:
%@pagelanguage="
java"
import="
java.util.*"
pageEncoding="
ISO-8859-1"
%>
head>
metahttp-equiv="
Content-Type"
content="
text/html;
charset=GB2312"
title>
Inserttitlehere<
/title>
/head>
添加用户:
add.action"
>
username:
inputtype="
text"
name="
br/>
password:
submit"
value="
add"
/form>
或者采用struts2标签:
%@taglibprefix="
s"
uri="
/struts-tags"
post"
textfieldlabel="
"
passwordlabel="
在action返回的view是一个jsp页面,也可以改成是一个freemarker模板页面:
resulttype="
/addInput.ftl<
addInput.ftl模板文件
当然我们希望能在addInput.ftl上也能够使用struts2的标签,需要在addInput.ftl页面最开始添加对struts2标签的引用:
注意:
struts2在freemarker页面中标签写法和jsp页面的写法不同,freemarker里是<
@s.form>
,jsp里是<
,一定不要写错了!
使用时发现对中文的支持不好,显示时中文出现乱码,这里修改下struts.xml配置文件:
<
constantname=”struts.i18n.encoding”value=”gb2312″/>
现在就可以在struts2中正常使用freemarker了!
二、在java程序中使用FreeMarker
FreeMarker的模板就是一个.ftl文本文件,在该文件中使用了一些FreeMarker的特别标记,这些标记会动态显示,或者控制程序输出,如下面的模板文件代码:
${name},你好!
${msg}
这里类似于${}的就是动态的内容,称作"
插值"
.
为了使用FreeMarker来将数据模型中的值合并到模板文件中,可按如下步骤进行:
1,创建Configuration实例,该实例负责管理FreeMarker的模板加载路径,负责生成模板实例
2,使用Configuration实例来生成Template实例,同进需要指定使用的模板文件
3,填充数据模型,数据模型就是一个Map对象
4,调用Template实例的process方法完成合并.
下面来看看几个测试实例,以加深我们的对模板语言的认识:
实例一:
Freemarker基本使用方法:
我们下面就用一个使用FreeMarker来创建一个java测试程序,将模板中的内容输出的指定的文件中,来简单了解一下其基本语法,程序源代码如下:
publicvoidtestFreemarker01()throwsException{
//指定模板文件路径(在项目下,你可以修改此路径)
Stringdir="
E:
/workspace/freemarker/src/com/freemarker/test"
;
//创建一个Configuration对象:
该实例负责管理FreeMarker的模板加载路径,负责生成模板实例
Configurationcfg=newConfiguration();
//配置freemarker从什么地方加载模板文件,通过创建的Configuration对象加载模板文件
cfg.setDirectoryForTemplateLoading(newFile(dir));
//加载模板,生成模板实例对象,同时制定所使用的模板文件
Templatetemplate=cfg.getTemplate("
test01.ftl"
//定义数据模型(Map对象),并填充数据
Maproot=newHashMap();
root.put("
strvalue"
"
世界,你好"
//定义输出,将其输出到指定文件中去
Writerout=newFileWriter(dir+"
/test01_out.txt"
//处理执行,将模板与数据进行合并
template.process(root,out);
}
test01.ftl模板文件如下:
第一个测试程序:
${strvalue}
test01_out.txt文件内容结果:
第一个测试程序:
世界,你好
实例二:
Freemarker中关于空值的处理问题:
当在模板文件中取值,拿不到,为空值时,freemaker默认会将错误信息打印在页面中或输出到指定文件中,为了将错误信息隐藏到后台,而不要现在前台页面中,需要设置setTemplateExceptionHandler
来忽略异常信息,具体代码如下:
//关于空值的处理问题
publicvoidtestFreemarker02()throwsException{
//配置freemarker从什么地方加载模板文件
[color=red]//增加设置忽略异常
cfg.setTemplateExceptionHandler(TemplateExceptionHandler.IGNORE_HANDLER);
[/color]
//加载模板
test02.ftl"
//定义数据
//root.put("
boolvalue"
true);
today"
newDate());
//定义输出
/test02_out.txt"
贴出模板文件test02.ftl:
${boolvalue?
string("
是"
"
否"
)}
${today?
yyyy年MM月dd日"
文件test02_out.txt显示结果:
是
2010年04月11日
如果上面的不设置忽略异常的话,则在模板文件中的${strvalue}将取不到值而在页面显示错误,当然可以在模板文件中可以使用条件判断将空值情况排除
#ifstrvalue?
exists>
/#if>
。
实例三:
关于集合处理的问题
在模板中显示数据模型中集合列表信息,
显示集合列表信息:
#list>
/#list>
条件判断:
#if变量?
exists>
条件${?
1"
0"
)}关于这些还是去看实例吧,我就不在这里描述了。
从实例中去学习其语法。
具体代码如下:
//关于集合的处理
publicvoidtestFreemarker03()throwsException{
//忽略异常
test03.ftl"
Listlist=newArrayList();
for(inti=0;
i<
10;
i++){
list.add("
listvalue"
+i);
list"
list);
/test03_out.txt"
test03.ftl模板文件如下:
listvalue:
#--正常显示的文本信息-->
#listlistasv>
${v}-${v_index}[${v_has_next?
y"
n"
)}]
test03_out.txt显示结果如下:
listvalue:
listvalue0-0[y]
listvalue1-1[y]
listvalue2-2[y]
listvalue3-3[y]
listvalue4-4[y]
listvalue5-5[y]
listvalue6-6[y]
listvalue7-7[y]
listvalue8-8[y]
listvalue9-9[n]
实例四:
关于宏定义的应用<
#macro>
/#macro>
//关于freemarker的宏定义
publicvoidtestFreemarker04()throwsException{
test04.ftl"
name"
李四"
/test04_out.txt"
来看看模板文件test04.ftl:
#macrogreetp>
Hello,${p}
@greetp="
张三"
${name}"
来看看输出文件的结果:
Hello,张三
Hello,李四
实例五:
关于auto-import特性的使用,自动引入模板文件
//关于auto-import特性
publicvoidtestFreemarker05()throwsException{
//添加auto-import
cfg.addAutoImport("
my"
common.ftl"
test05.ftl"
)