ホームページ > ウェブフロントエンド > htmlチュートリアル > シンプルな拡張機能により、beetl HTML タグで親子のnesting_html/css_WEB-ITnoseをサポートできるようになります

シンプルな拡張機能により、beetl HTML タグで親子のnesting_html/css_WEB-ITnoseをサポートできるようになります

WBOY
リリース: 2016-06-24 11:49:31
オリジナル
1430 人が閲覧しました

デフォルトでは、Beetl の HTML タグは親子のネストをサポートしていません。jsp タグと同様に、親タグは子タグの情報を知っている必要があり、子タグも親タグの情報を知っている必要があります。しかし、beetl に必要なのは、ネストされたタグをサポートするための単純な拡張機能だけです。

まず、2 つの HTML タグ table.tag と tr.tag を実現する最終的な使用効果を見てみましょう。これらは次のようにページで使用できます:

<#table data ="${userList}"><#tr class="3c" name="name"> 名称 </#tr></#table>
ログイン後にコピー



テーブルの読み取り。 tag、tr.tag 前に、HTML タグを拡張する方法を見てみましょう
まず、HTMLTagSupportWrapper を拡張する必要があります。このクラスは、必要に応じてカスタマイズするために拡張できます。カバレッジを登録します。したがって、クラス

public class HTMLNestTagSupportWrapper extends HTMLTagSupportWrapper{public void render(){....}}
ログイン後にコピー



を実装し、構成ファイルで TAG.htmltag= bingo.util.HTMLNestTagSupportWrapper を構成して有効にします。

HTMLNestTagSupportWrapper は TagNestContext クラスを使用します。このクラスは実際には、親タグのコンテキスト、現在のタグ情報、および子タグのコンテキストを記録するツリー構造です。このようにして、各タグは親タグまたは子タグにアクセスできます。 . : コードは次のとおりです

public class TagNestContext {private  Tag tag = null;private TagNestContext parent = null;private List<TagNestContext> children = null;public  Tag getTag() {    return tag;}public void setTag(Tag para) {    this.tag = para;}public TagNestContext getParent() {    return parent;}public void setParent(TagNestContext parent) {    this.parent = parent;}public List<TagNestContext> getChildren() {    if(children==null) children = new ArrayList<TagNestContext>();    return children;}public void setChildren(List<TagNestContext> children) {    this.children = children;}}
ログイン後にコピー



HTMLNestTagSupportWrapper の実装を振り返ってみましょう

public void render(){    HttpServletRequest request = (HttpServletRequest)this.ctx.getGlobal("request");    TagNestContext tnc = (TagNestContext)request.getAttribute("tagContext");    if(tnc==null){        tnc = new TagNestContext();        tnc.setTag(this);        request.setAttribute("tagContext", tnc);        super.render();        request.removeAttribute("tagContext");    }else{        TagNestContext child = new TagNestContext();        child.setParent(tnc);        child.setTag(this);        tnc.getChildren().add(child);        request.setAttribute("tagContext", child);        super.render();        //重新设置        request.setAttribute("tagContext", child.getParent());    }}public String getTagName(){    return (String)this.args[0];}public Object get(String attr){    Map map =  (Map)this.args[1];    return map.get(attr);}
ログイン後にコピー



上記のコードのように、特定の HTML タグをレンダリングする前 (super.r を呼び出す) ender() の前)。これはリクエスト内の Get the NestContext から取得できます。そうでない場合は、新しい NestContext を生成します。すでに存在する場合。次に、現在の NestContext を親 NestContext に追加します。レンダリング後、NestContext をリセットする必要があります。

最後に、tr.tag の実装方法を見てみましょう。tr はテーブル ヘッダーの生成のみを実装します


table.tag の数を知る必要があります。


<tr class="${class}">${tagBody}</tr>
ログイン後にコピー


etTagContext は、現在のコンテキストを取得するための登録メソッドです


ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート