<div class="al-chk-item-border">
<input type="checkbox" value="1" id="lvl_1" checked="checked" name="lvl"/><label for="lvl_1" class="al-chk-item-label">高級</label>
</div>
<div class="al-chk-item-border">
<input type="checkbox" value="2" id="lvl_2" checked="checked" name="lvl"/><label for="lvl_2" class="al-chk-item-label">中級</label>
</div>
<div class="al-chk-item-border">
<input type="checkbox" value="3" id="lvl_3" name="lvl"/><label for="lvl_3" class="al-chk-item-label">初級</label>
</div>
標簽實現(xiàn):
<al:checkbox data="{1:高級,2:中級,3:初級}" name="lvl" value="1"></al:checkbox>默認選中1
<al:checkbox data="{1:高級,2:中級,3:初級}" name="lvl" value="1,2"></al:checkbox>默認選中1,2
<input type="checkbox" id="chk_fn" name="fn" value="1" /><label for="chk_fn">是否開放</label>
標簽實現(xiàn):
<al:checkbox data="{1:是否開放}" name="fn" id="chk"></al:checkbox>
<al:checkbox data="{1:是否開放}" name="fn"></al:checkbox>如果不設(shè)置id則會根據(jù)name和value生成id="fn_1"
<al:checkbox data="{1:是否開放}" name="fn" id="chk" value="1"></al:checkbox>如果設(shè)置value="1"(與data中的值一致),則生成的checkbox默認選中
value與body為空的情況下
如果nvl=true則顯示當前日期,如果nvl=false則不輸出
如果nvl=其他值,則直接輸出nvl
如果沒有指定value,body,nvl都為空,同時def有值,則輸入def
需要注意的是def與nvl=true時,日期都會參與格式化與運算(如增加一天),而nvl=其他值時,直接原樣輸出evl并不執(zhí)行格式化與其他運算
def是指如果沒有輸入值,則取默認值,默認值同樣會執(zhí)行格式化與其他運算
evl/nvl是指如果結(jié)果為empt(null),則直接輸出evl/nvl,不會執(zhí)行格式化,不會執(zhí)行運算
有一種典型的場景AJAX分頁,
用戶第一次打開列表頁時默認顯示第1頁。
用戶在列表頁中切換到第2頁后,在第2頁中打開一個條目的明細。操作完明細后退。返回到到列表
這時列表頁需要直接顯示第2頁數(shù)據(jù)。
如何區(qū)分是后退過來的還是頁面刷新過來的。navi是在列表頁中存放了一個隱藏的input在切換頁數(shù)后修改這個input
刷新過來的頁面這個input值為空,而后退過來的這個input值為2
根據(jù)瀏覽器加載機制,在頁面加載完成之后才會給input賦值。所以在頁面加載過程中取不到這個input值。
可以把需要取input值的代碼放在setTimeout(function(){取值},0);
al:checkbox設(shè)置data-*屬性
set.add(DataRow.parseJson("{''ID'':''1'',''CODE'':''01'',''NM'':''高級'',''TITLE'':''高級工工程師'',''LVL'':''A''}"));
set.add(DataRow.parseJson("{''ID'':''2'',''CODE'':''02'',''NM'':''中級'',''TITLE'':''中級工工程師'',''LVL'':''B''}"));
set.add(DataRow.parseJson("{''ID'':''3'',''CODE'':''03'',''NM'':''初級'',''TITLE'':''初級工工程師'',''LVL'':''C''}"));
通過itemExtra設(shè)置data-*
<al:checkbox data="${set}" border="true" itemExtra="id:ID,code:CODE"/>
根據(jù)ID值生成data-id值,執(zhí)行結(jié)果
<input type="checkbox" value="1" id="chk_1" name="chk"data-id="1"data-code="01"/><label for="chk_1" class="">高級</label>
<input type="checkbox" value="2" id="chk_2" name="chk"data-id="2"data-code="02"/><label for="chk_2" class="">中級</label>
<input type="checkbox" value="3" id="chk_3" name="chk"data-id="3"data-code="03"/><label for="chk_3" class="">初級</label>
如果直接指定data-*的值,則通過extra屬性
<al:checkbox data="${set}" border="false" extra="id:1,code:2" name="chk"/>
執(zhí)行結(jié)果
<input type="checkbox" value="1" id="chk_1" name="chk" data-id="1" data-code="2"/><label for="chk_1" class="al-chk-item-label">高級</label>
<input type="checkbox" value="2" id="chk_2" name="chk" data-id="1" data-code="2"/><label for="chk_2" class="al-chk-item-label">中級</label>
<input type="checkbox" value="3" id="chk_3" name="chk" data-id="1" data-code="2"/><label for="chk_3" class="al-chk-item-label">初級</label>
默認情況下生成的標簽在最外層有div包圍,如果是多選框則每個條目外也有div包圍
可以通過clazz="item"設(shè)置每個條目外層div的class,通過borderClazz="border"設(shè)置最外層div的class
如果不需要外層div可以通過border="false"取消
在根據(jù)集合數(shù)據(jù)源生成多選框時,經(jīng)常需要生成一個數(shù)據(jù)源中沒有的默認項,
如數(shù)據(jù)源中只有高級、中級、初級三個選項,但收集數(shù)據(jù)時需要一個待定,這時需要在生成標簽時指定一個默認項
<al:checkbox data="${set }" head="默認" name="lvl"></al:checkbox>
如果需要設(shè)置選中項,首先要給這一項設(shè)置value值也就是生成的input的value值,再通過標簽的value屬性設(shè)置默認選中項
<al:checkbox data="${set }" head="默認" headValue="0" name="lvl" value="0"></al:checkbox>
當headValue與value中至少一個值相等時,當前項默認選中
根據(jù)集合數(shù)據(jù)源確認默認選中項時,默認情況下會取集合中條目的ID值,選項中的value值在數(shù)據(jù)源中出現(xiàn)時則選中當前項
但數(shù)據(jù)源經(jīng)常是從數(shù)據(jù)庫中查詢出來的,列中并不一定有ID,也有可能是CD
這時需要顯式指定根據(jù)哪一列或哪一個屬性的值來確認默認選中項
<al:checkbox data="${set }" valueKey="CODE" textKey="TITLE" value="${values}" rely="CD"/>
當set條目中的CODE值與values條目中的CD值有至少一項相等時,則選中當前項
set:用來生成復選框的數(shù)據(jù)源
value:用來確證默認選中項的數(shù)據(jù)源
根據(jù)集合數(shù)據(jù)源生成checkbox時,默認情況下會取集合中條目的ID值作為input的value值,取條目的NM值作為label的標簽體
但數(shù)據(jù)源經(jīng)常是從數(shù)據(jù)庫中查詢出來的,列中并不一定有ID和NM,也有可能是CODE,TITLE或其他情況
這時需要顯式指定value key與text key
<al:checkbox data="${set }" valueKey="CODE" textKey="TITLE" />
<div class="al-chk-item-border">
<input type="checkbox" value="1" id="lvl_1" checked="checked" name="lvl"/><label for="lvl_1" class="al-chk-item-label">高級</label>
</div>
<div class="al-chk-item-border">
<input type="checkbox" value="2" id="lvl_2" checked="checked" name="lvl"/><label for="lvl_2" class="al-chk-item-label">中級</label>
</div>
<div class="al-chk-item-border">
<input type="checkbox" value="3" id="lvl_3" name="lvl"/><label for="lvl_3" class="al-chk-item-label">初級</label>
</div>
標簽實現(xiàn):、
DataSet set = new DataSet();
set.add(DataRow.parseJson("{''ID'':''1'',''NM'':''高級''}"));
set.add(DataRow.parseJson("{''ID'':''2'',''NM'':''中級''}"));
set.add(DataRow.parseJson("{''ID'':''3'',''NM'':''初級''}"));
DataSet values = new DataSet();
values.add(DataRow.parseJson("{''ID'':''1''}"));
values.add(DataRow.parseJson("{''ID'':''2''}"));
<al:checkbox data="${set }" name="lvl" value="${values }"></al:checkbox>
這里將根據(jù)values中的條目的ID來確定默認選中項
通過集合數(shù)據(jù)源生成checkbox時,有時需要根據(jù)某一列表值設(shè)置默認選中
如所有級別為A的條目默認選中
DataSet set = new DataSet();
set.add(DataRow.parseJson("{''ID'':''1'',''CODE'':''01'',''NM'':''高級'',''TITLE'':''高級工工程師'',''LVL'':''A''}"));
set.add(DataRow.parseJson("{''ID'':''2'',''CODE'':''02'',''NM'':''中級'',''TITLE'':''中級工工程師'',''LVL'':''B''}"));
set.add(DataRow.parseJson("{''ID'':''3'',''CODE'':''03'',''NM'':''初級'',''TITLE'':''初級工工程師'',''LVL'':''C''}"));
<al:checkbox data="${set}" name="chk" checkedValue="A"/>
條目中ID=A時,當前項選中
<al:checkbox data="${set}" name="chk" checkedValue="A" rely="LVL"/>
注意:生成input.value時還是取ID列的值,rely只是在判斷選中條件時使用,如果不指定rely則根據(jù)ID=A判斷是否選中
java:
String key ="NM";
DataRow row = new DataRow();
row.put(key,"張三");
DataSet set = new DataSet();
set.add(row);
jsp:
<al:text data="${row}" property="NM"/>
取row中的NM列的值
等同于${row.NM}
在實現(xiàn)開發(fā)過程中,NM經(jīng)常需要動態(tài)值,此時才需要text標簽
<al:text data="${row}" property="${key}"/>
按下標取值
<al:text data="${set}" index="0" property="${key}"/>
AJAX分頁一般需要
1.結(jié)構(gòu)頁面
2.數(shù)據(jù)頁面
每個頁面一般對應(yīng)后臺的Controller為其提供必要數(shù)據(jù)
大體流程一般是
1.訪問結(jié)構(gòu)controller
2.結(jié)構(gòu)controler打到對應(yīng)的結(jié)構(gòu)頁面
3.結(jié)構(gòu)頁面發(fā)起ajax請求到數(shù)據(jù)controller
4.數(shù)據(jù)controller查詢數(shù)據(jù)并調(diào)用數(shù)據(jù)頁面生成html結(jié)構(gòu)返回到瀏覽器
5.結(jié)構(gòu)頁接收到html添加到當前頁面中
實現(xiàn)方式:
在結(jié)構(gòu)頁面中添加分頁標簽<al:navi page="分頁下標顯示位置" body="生成的HTML結(jié)構(gòu)顯示位置" url="數(shù)據(jù)controller對應(yīng)的url"/>
navi標簽有多個屬性可以設(shè)置
type:0按下標分頁(默認) 1:只在底部顯示“加載下一頁”(內(nèi)容通過guide設(shè)置)
param:提供查詢參數(shù)的函數(shù),以json格式返回
creater:方式ajax或html
intime:頁面加載完成后是否立即執(zhí)行
refresh:生成刷新當前頁的函數(shù)
before:加載數(shù)據(jù)前執(zhí)行
after:加載數(shù)據(jù)后執(zhí)行
function:標簽執(zhí)行完后會生成一個函數(shù),可以調(diào)用當前方法相當于重新查詢第一頁數(shù)據(jù)
auto:瀏覽器滾動到底部時是否自動加載下一頁數(shù)據(jù),一般移動瀏覽器使用
jump:是否顯示跳轉(zhuǎn)到第幾頁
guide:加載下一頁的文本
empty:查詢無內(nèi)容時提示
over:到達最后一頁的提示
stat:是否顯示統(tǒng)計(統(tǒng)計格式在配置文件中設(shè)置)
style:對應(yīng)分頁配置文件中的key
為什么需要數(shù)據(jù)頁面?
在<c:forEach>中經(jīng)常需要取上一條或下一條的數(shù)據(jù),但jstl中并沒有提供相應(yīng)的標簽,可以通過<al:text>來實現(xiàn)
<c:forEach var="item" items="${set}" varStatus="status">
當前行姓名:${item.NM}
上一行姓名:<al:text data="${set}" properyt="NN" index="${status.index-1}"></al:text>
</c:forEach>
靜態(tài)屬性一般通過EL表達式就可以實現(xiàn)
如${user.NM}
而實際開發(fā)過程中NM屬性經(jīng)過是動態(tài)值,此時可以通過<al:text>標簽實現(xiàn)
如:<al:text data="${user}" property="${key}"/>
select等標簽中textKey與textValue屬性,用來生成option標簽的value值和標簽體
如textValue="NM",生成標簽體時會調(diào)用集合中條目的getNm(),getString("NM")等方法。
如果需要提取多列值可以通過textValue="{列名/屬性名}"的形式實現(xiàn)
如textValue="{ID}-{NM}" text="標題{TITLE}"
DataSet set = new DataSet();
set.add(DataRow.parseJson("{''ID'':''1'',''CODE'':''01'',''NM'':''高級'',''TITLE'':''高級'',''LVL'':''A''}"));set.add(DataRow.parseJson("{''ID'':''2'',''CODE'':''02'',''NM'':''中級'',''TITLE'':''中級'',''LVL'':''B''}"));set.add(DataRow.parseJson("{''ID'':''3'',''CODE'':''03'',''NM'':''初級'',''TITLE'':''初級'',''LVL'':''C''}"));<al:checkbox data="${set}" textKey="TITLE"/>
<select>
<option value="1">高級</option>
<option value="2">中級</option>
<option value="3">初級</option>
</select>
<al:checkbox data="${set}" textKey="{CODE}-{TITLE}"/>
<select>
<option value="1">01-高級</option>
<option value="2">02-中級</option>
<option value="3">03-初級</option>
</select>
<al:checkbox data="${set}" textKey="CODE:{CODE} 標題:{TITLE}"/>
<select>
<option value="1">CODE:01 標題:高級</option>
<option value="2">CODE:02 標題:中級</option>
<option value="3">CODE:03 標題:初級</option>
</select>
<al:text></al:text>
用來生成<input id="op" type="checkbox" value="1"/><label>是否開放</label>標簽
屬性 | 是否必須 | 說明 |
data | true | 數(shù)據(jù)源,一般是從數(shù)據(jù)庫中查出來的一個集合(List,DataSet等),有一些常用數(shù)據(jù)如,是否,開關(guān)等也可以直接寫入data屬性格式如:data="{1:是,0:否}" |
border | false | 是否生成外層div |
checked | false | 是否選中 |
checkedValue | false | 生成多個多選框時,可以通過checkedValue設(shè)置默認選中的一項 |
valueKey | false | 如果是data是一個集合,需要通過當前屬性來指定以集合條目中的哪個屬性為checkbox屬性賦值 |
textKey | false | 如果是data是一個集合,需要通過當前屬性來指定以集合條目中的哪個屬性為label標簽賦值,支持多列 {ID}-{NM} |
property | false | value="${list}" property="ID"item.get(valueKey)是在list.items.property 集合中時選中 |
rely | false | rely="CHK" data.item.CHK = true或1或checkedValue或value時選中 |
id | false | id |
name | true | name |
clazz | false | class |
style | false | css樣式 |
onclick | false | js事件 |
onchange | false | js事件 |
onblur | false | js事件 |
onfocus | false | js事件 |
head | false | 生成多個多選框時,可以通過head設(shè)置第一個默認選項 |
headValue | false | 生成多個多選框時,可以通過head設(shè)置第一個默認選項 |
value | false | value="{1,2,3,4,5}" item.get(valueKey)是在1,3,4,5集合中時選中 value="${list}" property="ID" item.get(valueKey)是在list.items.property 集合中時選中 |
disabled | false | disable |
readonly | false | readonly |
encrypt | false | 集合中的value值是否需要加密 |
extra | false | 生成data-*數(shù)據(jù) |
itemExtra | false | 條目生成data-*數(shù)據(jù) |
borderClazz | false | 外層div.class |
labelClazz | false | label.class |
evl | false | value或body值是否取第一個不為空的值,多個值之間以逗號分隔 |
用來實現(xiàn)jsp或ajax方式分頁
url ;//數(shù)據(jù)來源
param ;//參數(shù)收集函數(shù)
container ;//返回內(nèi)容顯示容器
body ;//返回內(nèi)容顯示容器class或id(如果body與page分開)
cur ;//當前頁
page ;//返回內(nèi)容顯示容器class或id(如果body與page分開)
bodyContainer ;//如果body與page分開(兼容上一版本)
naviContainer ;//如果body與page分開(兼容上一版本)
creater = "ajax" ;//分頁方式 ajax | html
scroll ;//自動翻頁時 監(jiān)聽的滾動事件源 默認window
method = "post" ;
id ;//一個頁面內(nèi)多個標簽時需要id區(qū)分
function ;//指定function后,需主動調(diào)用function后加載數(shù)據(jù),查詢條件發(fā)生變化時可調(diào)用function
refresh ;//刷新當前頁的函數(shù)
before ;//渲染之前調(diào)用
after ;//渲染之后調(diào)用
intime = false ;//實時執(zhí)行
auto = null ;//是否加載下一頁內(nèi)容(swap加載更多typ=1時 劃屏到底部自動加載)
callback ;//回調(diào)函數(shù)
guide ;//加載更多文本提示
empty ;//查詢無數(shù)據(jù)顯示內(nèi)容
over ;//最后一頁提示
style = "default" ;//樣式標記對應(yīng)anyline-navi.xml中的config.key
stat = false ;//是否顯示統(tǒng)計
jump = false ;//是否顯示跳轉(zhuǎn)
vol = true ;//是否顯示每頁多少條(配置文件開啟的情況下有效)
delay = 0 ;//延遲執(zhí)行時間
這個標簽用一般來加密url參數(shù)
原文:<a href="/a.html?id=1">連接</a>
<des:a href="/a.html?id=1">連接</des:a>生成密文<a href="/a.html?id=密文">連接</a>
更多建議: