04.Beetl常用內建函式以及安全輸出—《Beetl視訊課程》
本期視訊實現了三個功能,模糊搜尋、標籤分類、登入/登出功能;
內容簡介:使用了常用內建函式,以及安全輸出,實現了上面提到的三個業務
一起學beetl目錄:https://my.oschina.net/u/1590490?tab=newest&catalogId=6214598
作者:GK
常用內建方法
- date 返回一個java.util.Date型別的變數,如 date() 返回一個當前時間(對應java的java.util.Date); ${date( “2011-1-1” , “yyyy-MM-dd” )} 返回指定日期
- print 列印一個物件 print(user.name);
- println 列印一個物件以及回車換行符號,回車換號符號使用的是模板本身的,而不是本地系統的.如果僅僅列印一個換行符,則直接呼叫println() 即可
- printFile 直接答應檔案,檔案路徑以模板根目錄為相對目錄,printFile(‘‘/common/header.html’’);
- nvl 函式nvl,如果物件為null,則返回第二個引數,否則,返回自己 nvl(user,”不存在”)
- isEmpty 判斷變數或者表示式是否為空,變數不存在,變數為null,變數是空字串,變數是空集合,變數是空陣列,此函式都將返回true
- isNotEmpty 同上,判斷物件是否不為空
- has 變數名為引數,判斷是否存在此全域性變數,如 has(userList),類似於1.x版本的exist(“userList”),但不需要輸入引號了
- assert 如果表示式為false,則丟擲異常
- trim 擷取數字或者日期,返回字元,如trim(12.456,2)返回”12.45″,trim(date,`yyyy`)返回”2017″
- trunc 擷取數字,保留指定的小數位,如trunc(12.456,2) 輸出是12.45.不推薦使用,因為處理float有問題,相容原因保留了
- decode 一個簡化的if else 結構,如 ${decode(a,1,”a=1″,2,”a=2″,”不知道了”)},如果a是1,這decode輸出”a=1″,如果a是2,則輸出”a==2″, 如果是其他值,則輸出”不知道了”
- debug 在控制檯輸出debug指定的物件以及所在模板檔案以及模板中的行數,如debug(1),則輸出1 [在3行@/org/beetl/core/lab/hello.txt],也可以輸出多個,如debug(“hi”,a),則輸出hi,a=123,[在3行@/org/beetl/core/lab/hello.txt]
- parseInt 將數字或者字元解析為整形 如 parseInt(“123”);
- parseLong 將數字或者字元解析為長整形,parseInt(123.12);
- parseDouble 將數字或者字元解析為浮點型別 如parseDouble(“1.23”)
- range 接收三個引數,初始值,結束值,還有步增(可以不需要,則預設為1),返回一個Iterator,常用於迴圈中,如for(var i in range(1,5)) {print(i)},將依次列印1234.
- flush 強制io輸出。
- json,將物件轉成json字串,如 var data = json(userList) 可以跟一個序列化規則 如,var data = json(userList,”[*].id:i”),具體參考 https://git.oschina.net/xiandafu/beetl-json
- pageCtx ,僅僅在web開發中,設定一個變數,然後可以在頁面渲染過程中,呼叫此api獲取,如pageCtx(“title”,”使用者新增頁面”),在其後任何地方,可以pageCtx(“title”) 獲取該變數
- type.new 建立一個物件例項,如 var user = type.new(“com.xx.User”); 如果配置了IMPORT_PACKAGE,則可以省略包名,type.new(“User”)
- type.name 返回一個例項的名字,var userClassName = type.name(user),返回”User”
- global 返回一個全域性變數值,引數是一個字串,如 var user = global(“user_”+i);
- cookie 返回指定的cookie物件 ,如var userCook = cookie(“user”),allCookies = cookie();
字串相關方法
- strutil方法對引數均不做空指標檢測,你可自定義方法來覆蓋這些內建的方法
- strutil.startWith ${ strutil.startWith(“hello”,”he”)} 輸出是true
- strutil.endWith ${ strutil.endWith(“hello”,”o”)} 輸出是true
- strutil.length ${ strutil. length (“hello”)},輸出是5
- strutil.subString ${ strutil.subString (“hello”,1)},輸出是”ello”
- strutil.subStringTo ${ strutil.subStringTo (“hello”,1,2)},輸出是”e”
- strutil.split ${ strutil.split (“hello,joeli”,”,”)},引數第一個是字串,第二個是正規表示式。輸出是陣列:返回第一個是”hello”,第二個是”joelli”
- strutil.contain ${ strutil.contain (“hello,”el”)},輸出是true
- strutil.toUpperCase ${ strutil.toUpperCase (“hello”)},輸出是HELLO
- strutil.toLowerCase ${ strutil.toLowerCase (“hello”)},輸出是hello
- strutil.replace ${ strutil.replace (“hello”,”lo”,”loooo”)},輸出是helloooo
- strutil.format ${ strutil.format (“hello,{0}, my age is {1}”,”joeli”,15)},輸出是hello,joeli, my age is 15. 具體請參考http://docs.oracle.com/javase/6/docs/api/java/text/MessageFormat.html
- strutil.trim 去掉字串的尾部空格
- strutil.formatDate var a = strutil.formatDate(user.bir,`yyyy-MM-dd`)};
- strutil.index var index = strutil.index(“abc”,”a”);返回 索引0
- strutil.lastIndex var index = strutil.lastIndex(“aba”,”a”);返回索引2
陣列相關方法
- array.range 返回陣列或者Collection一部分,接受三個引數,第一個是陣列或者Collection子類,第二,三個引數分別是起始位置
- array.remove 刪除某個陣列或者Collection的一個元素,並返回該陣列或者Collection.第一個是陣列或者Collection子類,第二個引數是元素
- array.add 向陣列或者Collection新增一個元素,並返回該陣列或者Collection。第一個是陣列或者Collection子類,第二個引數是元素
- array.contain 判斷陣列或者元素是否包含元素,如果包含,返回true。否則false。第一個是陣列或者Collection子類,第二個引數是元素
- array.toArray 轉化成陣列,如array.toArray(1,2,”a”);
- array.collection2Array 將java集合轉化為陣列 array.collection2Array([1,2,“])
正規表示式相關方法
- reg.match(str,regex) str為需要處理的字串,regex是表示式
- reg.replace(str,regex,replace),str為需要處理的字串,regex是表示式,替換的字串替換字串
- reg.find(str,regex) 返回找到的符合表示式的第一個字串,否則返回空字串
- reg.findList(str,regex) 找到所有符合表示式的字串,否則返回空列表
- reg.split(str,regex),對字串進行切分,返回列表
- reg.split(str,regex,limit) 同上,limit是最多返回個數
安全輸出
變數後面加一個感嘆號標識安全輸出,佔位符,定界符都可以使用,感嘆號後面可以寫預設值
例如:
${userName!}
${userName!"預設值"}
<%if(userName!"xxxx"=="xxxx"){......}%>
安全輸出是任何一個模板引擎必須重視的問題,否則,將極大困擾模板開發者。Beetl中,如果要輸出的模板變數為null,則beetl將不做輸出,這點不同於JSP,JSP輸出null,也不同於Freemarker,如果沒有用!,它會報錯.
模板中還有倆種情況會導致模板輸出異常
有時候模板變數並不存在(譬如子模板裡)
模板變數為null,但輸出的是此變數的一個屬性,如${user.wife.name}
針對前倆種情況,可以在變數引用後加上!以提醒beetl這是一個安全輸出的變數。
如${user.wife.name! },即使user不存在,或者user為null,或者user.wife為null,或者user.wife.name為null beetl都不將輸出
可以在!後增加一個常量(字串,數字型別等),或者另外一個變數,方法,本地呼叫,作為預設輸出,譬如:
${user.wife.name!”單身”},如果user為null,或者user.wife為null,或者user.wife.name為null,輸出”單身”
譬如
${user.birthday!@System.constants.DefaultBir}, 表示如果user為null,或者user. birthday為null,輸出System.constants.DefaultBir
還有一種情況很少發生,但也有可能,輸出模板變數發生的任何異常,如變數內部丟擲的一個異常
這需要使用格式${!(變數)},這樣,在變數引用發生任何異常情況下,都不作輸出,譬如
${!(user.name)},,beetl將會呼叫user.getName()方法,如果發生異常,beetl將會忽略此異常,繼續渲染
值得注意的是,在變數後加上!不僅僅可以應用於佔位符輸出(但主要是應用於佔位符輸出),也可以用於表示式中,如:
<%
var k = user.name!`N/A`+user.age!;
%>
<%
${k}
%>
如果user為null,則k值將為N/A
專案git地址:https://gitee.com/gavink/beetl-blog
視訊地址:下載下來會更清晰,視訊比較長,可使用倍速看,主要實現業務比較的地方耗費時間長
百度網盤下載: https://pan.baidu.com/s/1LyxAxlKpVXgVjwSXIbzBuA 提取碼: 68im
bilibili (可以調節清晰度): https://www.bilibili.com/video/av36278644/?p=4
部落格目錄:https://my.oschina.net/u/1590490?tab=newest&catalogId=6214598
相關文章
- 05.Beetl標籤函式以及定界符、佔位符介紹—《Beetl視訊課程》函式
- 常用輸入輸出函式函式
- python常用內建函式Python函式
- python 常用內建函式Python函式
- Python中常用的內建函式input()、isinstance()Python函式
- 列表、enumerate()函式,以及檢視資料型別所有的內建方法函式資料型別
- 內建函式函式
- Python常用函式有哪些?Python基礎入門課程Python函式
- webgl內建函式--通用函式Web函式
- 三種常用的內建函式--必須牢記函式
- hive內建函式Hive函式
- MySQL 內建函式MySql函式
- js內建函式JS函式
- php 內建函式PHP函式
- 微課|玩轉Python輕鬆過二級(2.4節):常用內建函式用法精要1Python函式
- 微課|玩轉Python輕鬆過二級(2.4節):常用內建函式用法精要3Python函式
- 微課|玩轉Python輕鬆過二級(2.4節):常用內建函式用法精要4Python函式
- 微課|玩轉Python輕鬆過二級(2.4節):常用內建函式用法精要2Python函式
- webgl內建函式--指數函式Web函式
- 8個最常用的內建函式,Python小白必備!函式Python
- 輸出輸入函式彙總函式
- ncurses輸出函式:字元+字串的輸出函式字元字串
- Python內建函式(一)Python函式
- Python內建函式(二)Python函式
- 1.5.5 Python內建函式Python函式
- Python 內建函式大全Python函式
- Python內建函式示例Python函式
- 18. 內建函式函式
- python內建函式——sortedPython函式
- vuejs 免費視訊課程VueJS
- 測試課程2視訊
- webgl內建函式--幾何函式與矩陣函式Web函式矩陣
- webgl內建函式--向量函式與紋理查詢函式Web函式
- Hive函式(內建函式+自定義標準函式UDF)Hive函式
- 函式進階· 第3篇《常用內建函式filter()、map()、zip(),怎麼用的呢?》函式Filter
- Hive的基本介紹以及常用函式Hive函式
- Python:PyHook3的HookManager內建屬性以及相關函式PythonHook函式
- python內建函式 map/reducePython函式