Jfinal结合Freemarker渲染界面

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>


好的,下面是一个完整的例子,演示如何使用 JFinalFreemarker 生成静态 HTML 并返回 JSON 数据。在这个例子中,我们将渲染一个简单的 HTML 页面,然后返回 JSON 数据。 1. 首先,我们需要在 pom.xml 文件中添加以下依赖项: ```xml <dependency> <groupId>com.jfinal</groupId> <artifactId>jfinal</artifactId> <version>4.1</version> </dependency> <dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> <version>2.3.30</version> </dependency> ``` 2. 接下来,我们需要创建一个 JFinal 的配置类,例如 `MyConfig.java`,并添加以下代码: ```java public class MyConfig extends JFinalConfig { public void configConstant(Constants me) { // 设置开发模式,方便调试 me.setDevMode(true); } public void configRoute(Routes me) { // 定义路由映射,将 /hello 映射到 HelloController me.add("/hello", HelloController.class); } public void configEngine(Engine me) { // 配置 Freemarker 模板引擎 me.setDevMode(true); // 设置开发模式 me.addSharedFunction("/common/layout.html"); // 添加共享模板 me.addSharedFunction("/common/pagination.html"); // 添加共享模板 } } ``` 3. 然后,我们需要创建一个 JFinal 控制器类,例如 `HelloController.java`,并添加以下代码: ```java public class HelloController extends Controller { public void index() { // 设置数据模型 setAttr("username", "John Doe"); setAttr("age", 30); setAttr("message", "Hello, World!"); // 渲染 HTML 页面 render("/hello.html"); // 渲染 JSON 数据 renderJson("{\"success\": true, \"data\": {\"message\": \"Hello, World!\"}}"); } } ``` 4. 接下来,我们需要创建一个 Freemarker 模板文件,例如 `hello.html`,并添加以下代码: ```html <!DOCTYPE html> <html> <head> <title>Hello, World!</title> </head> <body> <h1>Welcome, ${username}!</h1> <p>You are ${age} years old.</p> <p>${message}</p> </body> </html> ``` 5. 最后,我们需要启动 JFinal 应用程序,并访问 http://localhost:8080/hello/index,您将看到渲染的 HTML 页面和返回的 JSON 数据。 以上就是一个完整的例子,演示了如何使用 JFinalFreemarker 生成静态 HTML 并返回 JSON 数据。希望能对您有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值