JFinal3.0快速上手颖变,Validator組件(十六)

一般在正規(guī)Web的項目開發(fā)中咸产,程序員除了會在前端頁面通過JavaScript在表單提交之前驗證數(shù)據(jù)的合法性之外盖高,還會在服務端進行(后臺)數(shù)據(jù)合法性的校驗慎陵。這樣做的好處是可以保證程序的安全以及健壯性掏秩。

去年在注冊某知名開發(fā)者社區(qū)的時候,無意間發(fā)現(xiàn)該社區(qū)對表單數(shù)據(jù)的合法性校驗只在前端進行了處理荆姆。其后果蒙幻,讓人想想也是后怕。

今天我們共同來學習Jfinal中的Validator組件胆筒,使用這個組件可以很方便的在后臺實現(xiàn)對表單數(shù)據(jù)的合法性驗證邮破。

一、數(shù)據(jù)驗證要做什么仆救,實現(xiàn)什么效果

本小節(jié)要實現(xiàn)的目標就是驗證表單中的用戶名和密碼必填抒和,如果不填寫則給出提示信息,要去用戶填寫彤蔽。不過今天不使用JavaScript來做驗證摧莽,你是否已經(jīng)有了辦法了呢?實現(xiàn)效果如下圖:

驗證效果圖
二顿痪、從HTML頁面開始

這個表單非常的簡單镊辕,當用戶點擊登錄按鈕的時候,表單會提交數(shù)據(jù)到程序服務端去進行數(shù)據(jù)合法性驗證蚁袭。驗證的結(jié)果有兩種:驗證通過征懈,驗證未通過。在這里我們只需要去處理驗證不通過的情況:1揩悄、給出貼切的錯誤提示信息卖哎;2、保持數(shù)據(jù)狀態(tài)删性,進行頁面跳轉(zhuǎn)(回到提交的頁面亏娜,從哪里來,回到哪里去)蹬挺。

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>首頁</title>
</head>
<body>
    <!--使用表單维贺,以post方式提交數(shù)據(jù)-->
    <form action="login/userLogin" method="post">
        <label>用戶名:</label> 
        <input type="text" name="userName" placeholder="請輸入用戶名"
               value="${userName!}">
        <!--顯示驗證信息-->
        <span style="color: red">${userNameMsg!}</span> <br> 
        <label>密   碼:</label>
        <input type="password" name="userPass" placeholder="請輸入密碼"
               value="${userPass!}">
        <!--顯示驗證信息-->
        <span style="color: red">${userPassMsg!}</span> <br>
        <button type="submit">登錄</button>
    </form>
</body>
</html>
三、坐觀控制器

Validator 配置方式與攔截器完全一樣,很簡便汗侵。Demo中僅僅做一個演示幸缕,所以最后驗證通過之后,返回的是json數(shù)據(jù)晰韵。具體代碼如下:

package morality.business.login.controller;

import java.util.List;

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

/**
* @ClassName: LoginController
* @Description: 用戶登錄的控制器
* @author: Yetangtang
* @date: 2017年2月25日 上午11:10:54
* @version: 1.0 版本初成
*/
public class LoginController extends Controller{
    //默認處理方法
    public void index(){
        render("index.html");
    }
    
    /**
     * @author yetangtang
     * @desc用戶登錄方法
     * @param user_name;user_pass
     */
    @Before(LoginValidator.class)
    public void userLogin(){
        //獲取參數(shù)方式一
        String name=getPara("userName");
        String pass=getPara("userPass");
        //控制臺輸出參數(shù)信息
        System.out.println(name+pass);
        //獲取用戶列表
        List<Record> users=Db.find("select * from user ");
        //返回json數(shù)據(jù)
        renderJson(users);

    }

}

四发乔、好戲來了,有請Validator上場

Validator是一個攔截器雪猪,它本身是一個abstract的class實現(xiàn)了Interceptor,所以可以把它當做攔截器來使用栏尚。驗證機制有很多,這里只演示這一種只恨,小伙伴們在使用的時候可以去Validator實現(xiàn)中查看译仗。希望小伙伴們能夠靈活自如的運用技能點抬虽。

package morality.business.login.controller;

import com.jfinal.core.Controller;
import com.jfinal.validate.Validator;

public class LoginValidator extends Validator{

    /**
     * 驗證規(guī)則處理
     */
    protected void validate(Controller c) {
        //驗證數(shù)據(jù)必填,第一個參數(shù)是要驗證的字段名纵菌;
        //第二個參數(shù)是錯誤信息的key
        //第三個參數(shù)是要提示的錯誤信息
        validateRequiredString("userName","userNameMsg","請輸入用戶名");
        validateRequiredString("userPass","userPassMsg","請輸入密碼");
    }

    /**
     * 驗證錯誤處理
     */
    protected void handleError(Controller c) {
        //保持參數(shù)狀態(tài)
        c.keepPara("userName");
        c.keepPara("userPass");
        //返回到請求頁面
        c.render("index.html"); 
    }
}

PS:非常感謝每位關(guān)注我的道友阐污,因為有你們的存在,讓自己拒絕拖延咱圆。愿大家都能學習的愉快笛辟!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市序苏,隨后出現(xiàn)的幾起案子手幢,更是在濱河造成了極大的恐慌,老刑警劉巖忱详,帶你破解...
    沈念sama閱讀 218,546評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件围来,死亡現(xiàn)場離奇詭異,居然都是意外死亡匈睁,警方通過查閱死者的電腦和手機监透,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來软舌,“玉大人才漆,你說我怎么就攤上這事》鸬悖” “怎么了?”我有些...
    開封第一講書人閱讀 164,911評論 0 354
  • 文/不壞的土叔 我叫張陵黎比,是天一觀的道長超营。 經(jīng)常有香客問我,道長阅虫,這世上最難降的妖魔是什么演闭? 我笑而不...
    開封第一講書人閱讀 58,737評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮颓帝,結(jié)果婚禮上米碰,老公的妹妹穿的比我還像新娘。我一直安慰自己购城,他們只是感情好吕座,可當我...
    茶點故事閱讀 67,753評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著瘪板,像睡著了一般吴趴。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上侮攀,一...
    開封第一講書人閱讀 51,598評論 1 305
  • 那天锣枝,我揣著相機與錄音厢拭,去河邊找鬼。 笑死撇叁,一個胖子當著我的面吹牛供鸠,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播陨闹,決...
    沈念sama閱讀 40,338評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼楞捂,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了正林?” 一聲冷哼從身側(cè)響起泡一,我...
    開封第一講書人閱讀 39,249評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎觅廓,沒想到半個月后鼻忠,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,696評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡杈绸,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,888評論 3 336
  • 正文 我和宋清朗相戀三年帖蔓,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片瞳脓。...
    茶點故事閱讀 40,013評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡塑娇,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出劫侧,到底是詐尸還是另有隱情埋酬,我是刑警寧澤,帶...
    沈念sama閱讀 35,731評論 5 346
  • 正文 年R本政府宣布烧栋,位于F島的核電站写妥,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏审姓。R本人自食惡果不足惜珍特,卻給世界環(huán)境...
    茶點故事閱讀 41,348評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望魔吐。 院中可真熱鬧扎筒,春花似錦、人聲如沸酬姆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽轴踱。三九已至症脂,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背诱篷。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評論 1 270
  • 我被黑心中介騙來泰國打工壶唤, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人棕所。 一個月前我還...
    沈念sama閱讀 48,203評論 3 370
  • 正文 我出身青樓闸盔,卻偏偏與公主長得像,于是被迫代替她去往敵國和親琳省。 傳聞我的和親對象是個殘疾皇子迎吵,可洞房花燭夜當晚...
    茶點故事閱讀 44,960評論 2 355

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

  • HTML表單 在HTML中,表單是 ... 之間元素的集合针贬,它們允許訪問者輸入文本击费、選擇選項、操作對象等等桦他,然后將...
    蘭山小亭閱讀 3,418評論 2 14
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,149評論 25 707
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理蔫巩,服務發(fā)現(xiàn),斷路器快压,智...
    卡卡羅2017閱讀 134,657評論 18 139
  • 命令 cul -l www.baidu.com //訪問網(wǎng)址 start aa //用GUI視圖方式打開 echo...
    zhangkun_sunset閱讀 140評論 0 0
  • 鮑勃·迪倫問“一個男人要走多少路才能被稱為一個男人”蔫劣,我很想問“一個男人走了什么樣的路才會失去生的勇氣”坪郭。 求死也...
    大臉貓的自留地閱讀 294評論 0 2