擴展beetl 讓 HTML標籤支持父子嵌套

默認狀況下,Beetl的html標籤並不支持父子嵌套,就像相似jsp標籤那樣,父標籤須要知道子標籤的信息,子標籤也須要知道父標籤信息。可是beetl只須要簡單擴展,就能完成嵌套標籤支持。 

首先看一個最終的使用效果,實現倆個html標籤table.tag,tr.tag.能夠在頁面上這麼用: css

<#table id="tableId" style="kk" data="${userList}" var="row,index">
<#tr style="trcss1" name=""  > ${index} </#tr>
<#tr style="trcss1" name="名稱" import="true" > ${row.name} </#tr>
<#tr style="trcss2" name="年紀"> ${row.age} </#tr>
<#tr style="trcss3" name="操做"> <#label icon="update">更新</#label><#label icon="update">delete</#label></#tr>
</#table>

table標籤能夠接收一個data,就是一個等待遍歷的集合,var屬性申明瞭倆個變量,分別是表明行數據的row,和表明順序的index,這樣標籤tr能夠使用.這倆個變量在table.tag裏賦值,able.tag標籤實現以下: html


<table>
<tr>
<%
//tag表示當前標籤,chidren屬性得到下級標籤
var trs = tag.children;
for(tr in trs){
//輸出表頭
%>
<td>${tr.name}</td>
<%} %>
<tr>
<%

for(row in tag.data) {
//先綁定變量,這樣tr能使用
@tag.binds(row,rowLP.index);
%>
<tr>
<%

for(tr in trs){
//tr.body將執行tr裏的內容。另一個是tr.execute,將調用tr.tag,目前咱們不須要調用tr.tag
%>
<td class="${tr.style}">${tr.body}</td>
<%} %>
<tr>
<%} %>
</table>


要實現如上嵌套功能,beetl須要註冊新的標籤實現來代替原有的htmltag,和 htmltagvar實現,配置文件以下: java


TAG.htmltag= bingo.util.beetl.HTMLTag
TAG.htmltagvar= bingo.util.beetl.HTMLVarBindingTag



 這倆個類如何實現,就再也不這裏展開了,具體能夠參考代碼

http://git.oschina.net/xiandafu/bingo
css3

相關文章
相關標籤/搜索