本文詳細介紹bboss标簽庫特有表達式的使用方法。可以在分頁/清單/詳細資訊标簽及相關标簽中使用表達式。
1 概述
表達式支援的基本操作有:乘法,除法,求餘,加/減,字元串的加操作
操作數:可以為變量,整數,小數,字元串
其中變量是指清單/分頁/頁面詳細資訊中的對象屬性名稱,為如下形式:
{variable name}
表達式中用"{"和"}"來辨別變量
在表達式中需要屬性的值時必須通過變量的方式來擷取
變量名稱有三種形式,每種形式有不同的含義:
簡單變量 -- 及為目前清單中基本屬性,例如 name
二重變量 -- 及為目前清單中屬性對應對象中的屬性,例如 user.name
帶索引的變量-- 如果清單或者分頁或者詳細資訊标簽的使用出現嵌套的情況時通過在變量中使用索引來求外層清單中的對象屬性的值,
索引必須設定在變量名稱的最前面并且為數字,以‘.’号與變量名稱隔開,
例如 1.name或者1.user.name表示第二層嵌套中的屬性(外層嵌套的編号從最外層開始,最外層也就是第一層的編号為0,第二層為1。。。)
聚合操作也是針對變量(屬性)而設計
例如:
2 * 2
2 + 2 * 3
2 - 2 / 3
2 - 3 % 2
2* {var1} / {var2}
上述操作可以任意組合
對應的cell标簽屬性名稱為expression,屬性值可以為一個表達式,也可以為一個字元串或者一個數,例如:
數:整數123,或者小數21342.234234
字元串:"\"測試\""
表達式:{屬性1} + {屬性}
對應的邏輯标簽有兩個屬性:expression和expressionValue,屬性值同cell标簽expression屬性值
2 保留變量
整個标簽庫為表達式預留了以下變量:
rowid:可以在表達式中擷取目前記錄集的行号,帶頁面偏移量,前面可帶外面集合的索引号,索引号從最外層集合以0開始,依次加1
offset:在表達式中擷取目前頁面記錄的起始位置,分頁時有用
rowcount :儲存總記錄數
pagesize:儲存當頁擷取到的實際紀錄數
mapkey: 儲存map疊代目前的key值
currentcell:儲存list/array循環中目前的值
例如:
<pg:equal value=”1” expression=”{rowid}%5”>//當行号rowid模5求餘為1時執行等于标簽中的值
Output something.
</pg:equal>
3 執行個體
3.1 通過計算表達式的值确定cell标簽的輸出值,例如:
情況1 表達式中隻有數字(整數和小數都可以,如果全是整數那麼輸出的結果是一個整數,如果出現小數那麼輸出的結果将是小數)
隻有整數<pg:cell expression="1 + 2 + (123 * 12)/2*(12-3)"/>表達式計算的值作為cell标簽的輸出,可以通過numerformat屬性對輸出的數字進行格式化
有小數 <pg:cell expression="1 + 2.2 + (123 * 1.2)/2*(12-3.2)"/>表達式計算的值作為cell标簽的輸出,可以通過numerformat屬性對輸出的數字進行格式化
情況2 表達式中有字元串,那麼表達式将會把操作數全部當作字元串來處理
<pg:cell expression="\"值:\" + {屬性}"/>,标簽庫首先會求目前清單中屬性值,然後将屬性值和前面的提示資訊一起輸出
與前面的提示資訊一起輸出
情況3 表達式中有屬性:
<pg:cell expression="{屬性1} + {屬性2} + (123 * 12)/2*(12-{屬性3})"/>
标簽庫在解析表達式的時候會擷取表達式中出現的變量(及屬性)的值,然後再求整個表達式的值。
比如"{屬性1} + {屬性2} + (123 * 12)/2*(12-{屬性3})", 首先求出屬性1、屬性2
屬性3的值,如果求出的值分别為4,5,6,那麼表達式就會變成:
4 + 5 + (123 * 12)/2*(12-6),最終計算的結果将會作為cell标簽的輸出
3.2 邏輯标簽可以指定表達式來确定實際值(expression屬性)和期望值(expressionValue屬性),或者是确定其中的一個,表達式的求值過程和cell标簽中表達式求值過程一緻,下面以equal标簽來舉幾個例子,其它的邏輯标簽都是一樣的
情況1 比較兩個屬性的值
<pg:equal colName="attr1" expressionValue="{attr2}"/>
或者
<pg:equal expression="{attr1}" expressionValue="{attr2}"/>這兩種方式是等價的
如果有嵌套:
<pg:equal colName="attr1" expressionValue="{0.attr2}"/>
<pg:equal expression="{attr1}" expressionValue="{0.attr2}"/>這兩種方式是等價的
<pg:equal expression="{0.attr1}" expressionValue="{0.attr2}"/>這兩種方式是等價的
情況2
<pg:equal colName="attr1" expressionValue="1+2+{attr2}"/>
<pg:equal expression="{attr1}" expressionValue="1+2+{0.attr2}"/>這兩種方式是等價的
<pg:equal expression="{0.attr1}" expressionValue="1+2+{0.attr2}"/>這兩種方式是等價的
其它邏輯标簽雷同
3.3 邏輯标簽in,notin使用說明、執行個體
邏輯标簽in功能說明:判斷計算屬性或者expression屬性對應的表達式得到值是否包含
在scope屬性或表達式對應的值範圍之内,值範圍以逗号分隔,如果包含則執行in标簽體對應的代碼,否則不執行。
邏輯标簽notin功能說明:判斷計算屬性或者expression屬性對應的表達式得到值是否包含
在scope屬性或表達式對應的值範圍之内,值範圍以逗号分隔,如果不包含則執行notin标簽體對應的代碼,否則不執行。
<pg:in expression="{aaa}" scope="1,2,3,4,5">ddddd</pg:in>
<pg:notin expression="{aaa}" scope="1,2,3,4,5">ddddd</pg:notin>
<pg:in colName="aaa" scope="1,2,3,4,5">ddddd</pg:in>
<pg:notin colName="aaa" scope="1,2,3,4,5">ddddd</pg:notin>
<pg:in expression="{aaa}" scope="{scopevaribale}">ddddd</pg:in>
<pg:notin expression="{aaa}" scope="{scopevaribale}">ddddd</pg:notin>
3.4關于表達式的改進:
expression,expressionValue可以用來指定表達式,并對表達式求值,之前不能指定常量,現在可以了舉例如下:
并且增加了表達式内置變量rowid,offset,這兩個變量可以直接再表達式中使用,rowid存放目前記錄的行号,offset存放目前頁面的起始位址
<pg:equal expression="{rowid}" expressionValue="1">
啊啊啊啊
3.5 增加contain和match兩個對屬性值和表達式值進行正規表達式比對的标簽,要比對的模式通過pattern屬性來指定。
使用執行個體:
<pg:contain expression="{aaa}" pattern="[1-2]+">ddddd</pg:contain>
<pg:match expression="{aaa}" pattern="[1-2]+">ddddd</pg:match>
<pg:contain colName="aaa" pattern="[1-2]+">ddddd</pg:contain>
<pg:match colName="aaa" pattern="[1-2]+">ddddd</pg:match>
3.6 表達式中對變量求長度方法
表達式中對變量求長度方法,如果變量是一個容器集合對象或者數組對象或者字元串,想在表達式中擷取其長度,隻需要在變量名稱前面加size:字首即可。
使用執行個體:
<pg:equal expression="{size:aaa}" value="10">ddddd</pg:equal>
<pg:equal expression="{size:aaa}" expressionValue="{size:bbb}">ddddd</pg:equal>
更多的标簽屬性可以參考标簽定義tld檔案:
pager-taglib.tld