1.介绍
Jfinal默认render视图模式为Freemarker,如果想使用jsp视图,则需要设置
这样render时就是jsp视图。否则为Freemarker。
现在项目中的页面初始化数据都是用ajax请求数据,这样的模式不好,不但会把后台接口暴露出去,而且页面用户体验差。因此引入Freemarker模版引擎,后台初始化数据。以后项目页面必须使用这种模式,除非特殊情况。
2.开始使用
使用Freemarker需要用到包,将该jar引入到项目中去,即可开始开发。需要创建Controller action,然后在action中获取所有页面需要的数据。然后renderFreeMarker方法,完成视图渲染。代码:
try {
this.setCookie("name", URLEncoder.encode("5555","utf-8"),84000);
//设置数据
this.setAttr("username", "fwefwefw");
//设置cookie值
this.setAttr("cookies", this.getCookie("name"));
//设置列表数据
List<String> list = new ArrayList<String>();
list.add("列表1");
list.add("列表2");
list.add("列表3");
list.add("列表4");
list.add("列表5");
this.setAttr("testlist",list );
Map<String,List<String>> kindsMap = new HashMap<String,List<String>>();
List<String> aList = new ArrayList<String>();
aList.add("a1");
aList.add("a2");
List<String> bList = new ArrayList<String>();
bList.add("b1");
bList.add("b2");
kindsMap.put("a",aList);
kindsMap.put("b", bList);
this.renderFreeMarker("/index.html");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
接着页面开始取值,代码:
<body>
<!--判断是否为null -->
<#if cookies ??>
<!--取值 -->
<h>${cookies }</h>
</#if>
<div>你的名字:${username}</div>
<div>你设置cookie值:</div>
<#if testlist ??>
<h>列表大小:${testlist.size() }</h>
<br>
<!--遍历list-->
<#list testlist as info>
<a>${info}</a>
</#list>
</#if>
<h1> 取Map例子</h1>
<#if kindsMap ?? && kindsMap.size() gt 0>
<#list kindsMap.keySet() as mKey>
<h1>key:${mKey}</h1>
<!-- 定义变量 -->
<#assign item = kindsMap[mKey]>
<#list item as itemValue>
<h1>list value:${itemValue}</h1>
</#list>
</#list>
</#if>
</body>
相关网址:http://demojava.iteye.com/blog/800204
3.其他
Controller类需要分模块,按模块指定访问路径,例如:
this.renderFreeMarker("/index.html");//绝对根目录
this.renderFreeMarker("index.html");//相对路径 会请求/user/index.html页面
前台文件需要分模块,按模块建目录,与Controller路径对应起来。
使用这个解决动态资源路径问题。html页面使用Freemarker取值:
<script type="text/javascript" src="${contextPath}/js/jquery.js"></script>