JFinal3.0快速上手,遇見模板引擎(十七)

首先得感謝一下各位支持的朋友,因為你們的支持鼓勵,自己才得以堅持利用時間分享一些小知識。非常感謝,因為你們讓我少玩了王者農(nóng)藥,把時間用來做一些有意義的事情。

在本小節(jié)中,我們將一起學習JFinal的模板引擎的相關(guān)知識,因為內(nèi)容比較多,所以我會分為幾個小節(jié)講解,當然也會有重點的講解,忽略的地方還請各位道友自行查看文檔。

一、本節(jié)摧毀目標

本節(jié)的目標主要是1、學會使用include define指令的使用;2、學會模板函數(shù)的調(diào)用。結(jié)合Db + Record進行數(shù)據(jù)操作,實現(xiàn)一個添加操作。

今天演示使用的依然是一個用戶登錄頁面,知識稍微做了一些美化。我們在登錄的時候去填寫用戶信息,然后點擊登錄按鈕保存用戶信息,因為節(jié)約時間就不直接在數(shù)據(jù)中添加數(shù)據(jù)。

二、所需材料

1、一個數(shù)據(jù)庫實例,一張數(shù)據(jù)表,演示所用表名t_user;表結(jié)構(gòu)如下:

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for t_user
-- ----------------------------
DROP TABLE IF EXISTS `t_user`;
CREATE TABLE `t_user` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主鍵id',
  `email` varchar(255) NOT NULL DEFAULT '' COMMENT '郵箱',
  `pwd` varchar(255) NOT NULL COMMENT '密碼',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

2、JFinal3.0相關(guān)的jar包和手冊;
3、網(wǎng)絡(luò)(因為html頁面使用了一些CDN服務(wù));

三、寫點html頁面

下圖就是要實現(xiàn)的頁面效果,接下來我們將一起使用模板引擎玩一遍。這個頁面分為2個組件部分,第一部分是系統(tǒng)名稱部分,這部分使用#define指令完成;第二部分是數(shù)據(jù)表單部分,我們將表單存放在單獨的頁面,然后使用#include指令引入頁面。敲黑板,╭(╯^╰)╮本次使用的模板引擎不是freemarker,所以請你不要好心去設(shè)置viewType,本節(jié)演示所用的是JFinal提供的模板引擎。

就是這么棒

1、定義登錄也top區(qū)域,這樣定義的好處是,如果有多個地方需要使用到這樣一個top區(qū)域的內(nèi)容,我們不需要粘貼復制,只要通過一個調(diào)用指令就能完成;其次是便于維護,如果需求變更了,不需要一個個的去修改頁面內(nèi)容,只要修改一處就搞定。這樣的場景能夠理解吧?先創(chuàng)建一個html文件,命名為_login.html,然后編寫如下代碼,復制也行。

<!--使用#define 定義login函數(shù)-->
#define login()
<div class="top"><h2>歡迎登錄M9星球車輛信息管理系統(tǒng)    1.0</h2></div>
<!--#end結(jié)束定義-->
#end

2、編寫login_form.html頁面

真的只是html頁面內(nèi)容。

<!--form表單,action指定到userLogin-->
<form class="form-horizontal" action="/login/userLogin">

    <!--email(用戶賬號)-->
    <div class="form-group">
        <label for="inputEmail3" class="col-sm-2 control-label">Email</label>
        <div class="col-sm-8">
            <input type="email" class="form-control" id="inputEmail3" placeholder="Email" name="email">
        </div>
    </div>
    
    <!--賬戶密碼-->
    <div class="form-group">
        <label for="inputPassword3" class="col-sm-2 control-label">Password</label>
        <div class="col-sm-8">
            <input type="password" class="form-control" id="inputPassword3" placeholder="Password" name="password">
        </div>
    </div>
    
    <!--登錄按鈕-->
    <div class="form-group">
        <div class="col-sm-offset-2 col-sm-8">
            <button type="submit" class="btn btn-primary btn-lg btn-block">登錄</button>
        </div>
    </div>
    
</form>

3、組裝login.html頁面

看起來很好玩O(∩_∩)O哈哈~

<!--調(diào)用模板函數(shù)login-->
#@login()
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <!-- 上述3個meta標簽*必須*放在最前面,任何其他內(nèi)容都*必須*跟隨其后! -->
    <title>登錄頁面</title>

    <!-- Bootstrap -->
    <link  rel="stylesheet">
    <!--引入login.css文件-->
    <link href="../css/login.css" rel="stylesheet">

    <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
    <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
    <!--[if lt IE 9]>
    <script src="https://cdn.bootcss.com/html5shiv/3.7.3/html5shiv.min.js"></script>
    <script src="https://cdn.bootcss.com/respond.js/1.4.2/respond.min.js"></script>

    <![endif]-->
</head>
<body>
<!--引入form表單頁面-->
#include("login_form.html")
<!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
<script src="https://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
</body>
</html>

四、編寫LoginController并配置路由

1、編寫登錄控制器,假裝就是真實的登錄,雖然這里是添加數(shù)據(jù),?(? ???ω??? ?)?

package com.demo.login;

import com.jfinal.core.Controller;
import com.jfinal.plugin.activerecord.Db;
import com.jfinal.plugin.activerecord.Record;

public class LoginController extends Controller {

    //默認方法
    public void index() {
        render("login.html");
    }

    /**
     * @author sugarYe
     * @date 2017/05/10
     * @desc 用戶登錄
     */
    public void userLogin() {
        // 獲取登錄參數(shù)
        String email = getPara("email");
        String password = getPara("password");
        // 封裝數(shù)據(jù)對象
        Record user = new Record().set("email", email).set("pwd", password);
        // 持久化數(shù)據(jù)并接收處理狀態(tài)
        Boolean result = Db.save("t_user", user);
        // 判斷執(zhí)行結(jié)果
        if (!result) {
            // 處理你自己的業(yè)務(wù)
            render("erro.html"); //自己隨意編寫這個頁面
        } 
      
        //跳轉(zhuǎn)到清單頁面,這個頁面請先自行編寫
        render("userList.html");
        
    }

}

2、配置路由

    /**
     * 配置路由
     */
    public void configRoute(Routes me) {
        me.add("/login",LoginController.class,"/login");
    }

五、配置共享函數(shù)模板

使用addSharedFunction即可配置共享的模板函數(shù)信息,此處接收的參數(shù)是字符串類型的路徑信息。也就是你編寫的模板函數(shù)的頁面地址。

    /**
     * 配置模板信息
     */
    public void configEngine(Engine me) {
        me.addSharedFunction("/common/_login.html");
    }

恭喜你,你已經(jīng)完成了第一小節(jié)的所有的修煉,接下來就可以測試編寫的成果了。加油!

六、函數(shù)使用回顧

使用define 指令,可以在jfinal中定義模板函數(shù)。使用時以#define 函數(shù)名()開始,如#define login();以#end結(jié)束。

include 指令用于將外部模板內(nèi)容包含進來, 被包含的內(nèi)容會被解析成為當前模板中的一部分進行使用。

PS:故事還長,請別失望。模板只是剛開始(__) 嘻嘻……

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,967評論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,273評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,870評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,742評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,527評論 6 407
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,010評論 1 322
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,108評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,250評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,769評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 40,656評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,853評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,371評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,103評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,472評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,717評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,487評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,815評論 2 372

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,781評論 18 139
  • 22年12月更新:個人網(wǎng)站關(guān)停,如果仍舊對舊教程有興趣參考 Github 的markdown內(nèi)容[https://...
    tangyefei閱讀 35,200評論 22 257
  • 4 創(chuàng)建一個社交網(wǎng)站 在上一章中,你學習了如何創(chuàng)建站點地圖和訂閱,并且為博客應(yīng)用構(gòu)建了一個搜索引擎。在這一章中,你...
    lakerszhy閱讀 2,197評論 0 7
  • 又是很久沒有寫文了。 對于我來說,沒有寫文,意味著沒有生活。 沒有生活,意味著每一天重復著生存所必需的事情:吃飯、...
    cq小白菜閱讀 566評論 0 1
  • 當蘇毅穿過學校來到神墓山腳下的小亭子時,他突然發(fā)現(xiàn)不知何時,順著亭子的側(cè)旁出現(xiàn)了一條小徑,芳花野草散亂的向兩邊傾斜...
    小蘇書九州閱讀 264評論 0 0