當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
JSP页面的继承(extends)
生活随笔
收集整理的這篇文章主要介紹了
JSP页面的继承(extends)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
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,界說規劃 Jsp代碼?? <%@?taglib?uri="http://www.rapid-framework.org.cn/rapid"?prefix="rapid"?%>?? ?? ???"head">base_head_content?? ?? ???
?? ???"content">base_body_content?? ?? ?? 子頁面: child.jsp Jsp代碼?? <%@?taglib?uri="http://www.rapid-framework.org.cn/rapid"?prefix="rapid"?%>?? <%?//重界說父頁面的內容為content的內容?%>?? "content">?? ????child_body_content?? ?? ??? ?? <%@?include?file="base.jsp"?%>?? 如上: 咱們運用了兩個jsp tag: block,override,還有<@include >指令. 下面描繪各個功用: <html>?? ?base_head_content?? <body>?? ?<br?/>?? ?base_body_content?? body>?? html>?? 拜訪child.jsp輸出: Html代碼?? <html>?? ?base_head_content?? <body>?? ?<br?/>?? ?child_body_content?? body>?? html>?? ?能夠看到,child.jsp的的body輸出內容被重界說了. 現該tag能夠完成jsp的無限級的承繼聯系. 即 grandchild.jsp 承繼 child.jsp , child.jsp承繼 base.jsp? 3.詳細完成方法: Block Tag: Java代碼?? public?class?BlockTag?extends?TagSupport{?? ??? ?private?String?name;?? ??? ?public?void?setName(String?name)?{?? ??this.name?=?name;?? ?}?? ??? ?@Override?? ?public?int?doStartTag()?throws?JspException?{?? ??return?getOverriedContent()?==?null???EVAL_BODY_INCLUDE?:?SKIP_BODY;?? ?}?? ??? ?@Override?? ?public?int?doEndTag()?throws?JspException?{?? ??String?overriedContent?=?getOverriedContent();?? ??if(overriedContent?==?null)?{?? ???return?EVAL_PAGE;?? ??}?? ???? ??try?{?? ???pageContext.getOut().write(overriedContent);?? ??}?catch?(IOException?e)?{?? ???throw?new?JspException("tag?output?error",e);?? ??}?? ??return?EVAL_PAGE;?? ?}?? ??? ?private?String?getOverriedContent()?{?? ??String?varName?=?Utils.getOverrideVariableName(name);?? ??return?(String)pageContext.getAttribute(varName);?? ?}?? }?? Override Tag: Java代碼?? public?class?OverrideTag?extends?BodyTagSupport{?? ???? ?private?String?name;?? ??? ?public?void?setName(String?name)?{?? ??this.name?=?name;?? ?}?? ??? ?@Override?? ?public?int?doStartTag()?throws?JspException?{?? ??return?isOverrided()???SKIP_BODY?:?EVAL_BODY_BUFFERED;?? ?}?? ??? ?@Override?? ?public?int?doEndTag()?throws?JspException?{?? ??if(isOverrided())?{?? ???return?EVAL_PAGE;?? ??}?? ??BodyContent?b?=?getBodyContent();?? ??String?varName?=?Utils.getOverrideVariableName(name);?? ??pageContext.setAttribute(varName,?b.getString());?? ??return?EVAL_PAGE;?? ?}?? ??? ?private?boolean?isOverrided()?{?? ??String?varName?=?Utils.getOverrideVariableName(name);?? ??return?pageContext.getAttribute(varName)?!=?null;?? ?}?? ???? }?? 東西類: Java代碼?? class?Utils?{?? ?public?static?String?BLOCK?=?"__override__";?? ?public?static?String?getOverrideVariableName(String?name)?{?? ??return?BLOCK?+?name;?? ?}?? }?? 能夠看到,完成代碼不需求100行,重要是的完成竅門,由此,你從此能夠拋棄運用sitemesh. 而且如上完成方法具有更高功用。 而且筆者也擴大了freemarker模板,經過自界說指令,完成如上一樣的功用。 作者: 唐山
??
- override tag: ?會將標簽里邊的內容保存為pageContext的變量,變量稱號為name的特點加前綴,如 __override__$name = tag內容
- block tag: ?依據name特點稱號,若是發現__override__$name變量,則顯現被重界說的內容,不然顯現本身tag的內容.
- <%@include >指令: 經過該指令來完成承繼(extends)的功用(只能運用這個竅門),該指令有必要放置在頁面的最后面?
輸出:
直接拜訪base.jsp輸出: Html代碼??轉載于:https://www.cnblogs.com/fpqqchao/archive/2013/01/03/2842605.html
總結
以上是生活随笔為你收集整理的JSP页面的继承(extends)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SPOJ 375 query on a
- 下一篇: PHP 如何得到当前页面中所有已定义的变