1.介紹
使用過python django模板的應該清楚,django裡面有乙個激動人心的功能就是模板可以使用類的繼承關係。 即模板是可以繼承的,並且不限繼承的層次。 如
1. child.html extends base.html
2. grandchild.html extends child.html
這樣,我們在base.html中定義好html布局,然後在「子類」(我們這樣稱呼吧)重定義需要父頁面內容即可
2.jsp繼承示例
現在我們來看jsp中如何實現此功能(django與下面的宣告類似)。
父頁面: base.jsp,定義布局
<%@ taglib uri="" prefix="rapid" %>base_head_content
base_body_content
子頁面: child.jsp
<%@ taglib uri="" prefix="rapid" %><% //重定義父頁面的內容為content的內容 %>
child_body_content
<%@ include file="base.jsp" %>
如上: 我們使用了兩個jsp tag: block,override,還有<@include >指令.
下面描述各個功能:
直接訪問base.jsp輸出:
base_head_content
base_body_content
訪問child.jsp輸出:
base_head_content
child_body_content
可以看到,child.jsp的的body輸出內容被重定義了.
現該tag可以實現jsp的無限級的繼承關係. 即 grandchild.jsp 繼承 child.jsp , child.jsp繼承 base.jsp
3.具體實現方式:
block tag:
public class blocktag extends tagsupport
@override
public int dostarttag() throws jspexception
@override
public int doendtag() throws jspexception
try catch (ioexception e)
return eval_page; }
private string getoverriedcontent()
}
override tag:
public class overridetag extends bodytagsupport
@override
public int dostarttag() throws jspexception
@override
public int doendtag() throws jspexception
bodycontent b = getbodycontent();
string varname = utils.getoverridevariablename(name);
pagecontext.setattribute(varname, b.getstring());
return eval_page; }
private boolean isoverrided()
}
工具類:
class utils
}
可以看到,實現**不需要100行,重要是的實現技巧,由此,你從此可以放棄使用sitemesh. 並且如上實現方式具有更高效能。
並且筆者也擴充套件了freemarker模板,通過自定義指令,實現如上相同的功能。
該內容以後也會隨rapid-framework一起發布
原始碼位置:
PHP中類的繼承關係
原文 php中類的繼承關係 在php中,我時常會寫乙個類,類寫了乙個共用方法,然後讓子類去繼承就能得到相應的功能。假設大致有這麼乙個父類 1 2 class father 7 8 protected function say str hello world 11 12 然後呢,搞乙個子類去繼承他 1...
powerdesigner 類的繼承關係
在開發中,總是會面對部分相同的實體類這種情況的。那麼,我們需要在powerdesigner 中就直接關聯好這種關係。但是,怎麼做呢?實現方式 concrete table inheritance 具體表繼承 single table inheritance 單錶繼承 class table inhe...
類的關係之繼承
子類在呼叫構造方法時預設呼叫父類的構造方法 程式塊子類不能直接呼叫,子類執行構造方法之前,預設呼叫了父類的構造方法,父類的構造方法之前預設執行父類的塊this和super都是指代詞,代替的是物件 this代替的是當前執行方法時的那個物件,不一定是當前類的 super代替的是當前執行方法時的物件的父類...