1. 基本概念 1. Sitemeshはページ装飾技術です。 1 : フィルターを通してページアクセスを遮断する 2. サイトメッシュでは、ページは装飾テンプレートと通常のページの 2 種類に分かれています。 第二に、ウェブページのテンプレート変更の原則 ![]() ユーザーが左側のナビゲーションバーで「Show the Great Wall」(/ShowGreatWall.do)をクリックすると、右側の「Show the Great Wall」ページが指定されたテンプレートで装飾されます。 ![]() 上記のプロセスを要約すると、Sitemesh が Web ページを変更する基本原理は次のように説明できます。 ![]() 3. Sitemeshの設定と使用 1) WEB-INF/web.xmlにフィルター定義とsitemeshタグライブラリ定義を追加する 次のようにコード をコピーします 。<フィルター> <filter-name>サイトメッシュ</filter-name> <フィルタークラス>com.opensymphony.module.sitemesh.filter.PageFilter</フィルタークラス> </フィルター> <フィルターマッピング> <filter-name>サイトメッシュ</filter-name> <urlパターン>/*</urlパターン> </フィルターマッピング> <タグライブラリ> <taglib-uri>サイトメッシュデコレータ</taglib-uri> <タグライブラリの場所>/WEB-INF/sitemesh-decorator.tld</タグライブラリの場所> </タグライブラリ> <タグライブラリ> <taglib-uri>サイトメッシュページ</taglib-uri> <タグライブラリの場所>/WEB-INF/sitemesh-page.tld</タグライブラリの場所> </タグライブラリ> 2) WEB-INF/decorators.xml を作成します。このファイルでは、どのテンプレートを含めるか、各テンプレートがどの URL を変更するかを設定できます。また、テンプレート制御を必要としない URL も設定できます。decorators.xml の例は次のとおりです。 次のようにコード をコピーします 。<除外> <パターン>/ログイン*</パターン> </除外> <デコレーター defaultdir="/デコレーター"> <デコレータ名="メイン" ページ="DecoratorMainPage.jsp"> <パターン>/*</パターン> </デコレータ> <デコレータ名="pop" ページ="PopPage.jsp"> <パターン>/showinfo.jsp*</パターン> <パターン> /myModule/GreatWallDetailAction.do* </パターン> </デコレータ> </デコレータ> 3) 変更したテンプレートの例を見てみましょう 次のようにコード をコピーします 。<%@page contentType="text/html;?charset=GBK"%> <%@taglib uri="サイトメッシュデコレータ"?prefix="デコレータ" %> <html> <ヘッド> <タイトル> <デコレータ:タイトル/> </タイトル> <デコレータ:head/> </head> <本文> こんにちは世界 <hr/> <デコレータ:本体/> </本文> </html> 4) 変更されたページの例を見てみましょう。 次のようにコード をコピーします 。<%@ ページコンテンツタイプ="text/html;?charset=GBK"%> <html> <ヘッド> <title>こんにちは世界</title> </head> <本文> <p>装飾されたページはここに表示されます。</p </本文> </html> 5) デコレーションテンプレートで使用できる Sitemeshタグ<decorator:head /> を見て、デコレーションしたページのheadタグ内のコンテンツを抽出してみましょう。 <decorator:body /> は、 装飾されたページの body タグの内容を取り出します。 <decorator:title default="" /> は、 装飾されたページのタイトル タグのコンテンツを取得します。 default はデフォルト値です。 <decorator:getProperty property="" default="" writeEntireProperty=""/> は、 装飾されたページの関連タグの属性値を取得します。 writeEntirePropertyは、プロパティの値を表示するか、 「property=value」HTMLタグの属性を 表示するかを示します。
に ">" または <" が含まれている場合は、エラーが報告され、トランスコードする必要があることに注意してください。たとえば、 < default はデフォルト値です。 <decorator:usePage id="" /> は、 装飾されたページによってオブジェクトとして構築され、装飾されたページの JSP で直接参照できます。 6) デコレーションテンプレートでタグを使用する例を見る 次のようにコード をコピーします 。<html lang=" <デコレータ:getProperty プロパティ="lang"/> "> <ヘッド> <title> <デコレータ:title デフォルト="Hello" /> </title> <デコレータ:ヘッド /> </head> <body <デコレータ:getProperty property="body.onload" writeEntireProperty="1"/> > メタから変数会社の名前を取得します。 <デコレータ:getProperty プロパティ="meta.company"/> 変更されたページの本文の内容は次のとおりです。 <デコレータ:本体 /> <デコレータ:usePage id="myPage" /> <%=myPage.getRequest().getAttribute("ユーザー名")%> </本文> </html> 7) 変更されたページの対応するコードを確認します。 次のようにコード をコピーします 。<html lang="ja"> <ヘッド> <title>私のサイトメッシュ</title> <meta name="会社" content="スマートドット"/> <meta name="著者" content="zhangsan"/> <スクリプト> 関数 count(){10 を返す;} </スクリプト> </head> <body onload="count()"> <p>これは修正されたページです</p> </本文> </html> IV. 結論 1. Sitemesh で最も重要なことは、装飾用のテンプレートを作成し、どのページを装飾するかを decorators.xml で設定することです。したがって、Sitemeshを使用する主なプロセスは、デコレーションテンプレートを作成し、 decorators.xmlでURLパターンを構成することです。 2. プロジェクト全体を分析して、どのページをテンプレートに抽象化する必要があるかを確認します。たとえば、セカンダリ ページ、三次ページ、ポップアップ ウィンドウなどはすべて、対応するテンプレートにする必要があります。一般的に、大規模な OA システムには 8 個を超えるテンプレートはありません。 特別なリクエスト パスがフィルターの範囲内にあるが、テンプレートを使用したくない場合はどうすればよいでしょうか 。
次のようにコード をコピーします 。<?xml バージョン="1.0" エンコーディング="ISO-8859-1"?> <デコレーター defaultdir="/デコレーター"> <!-- 除外された URL は Sitemesh によって装飾されることはありません --> <除外> <パターン>/index.jsp*</パターン> <パターン>/ログイン/*</パターン> </除外> <デコレータ名="main" ページ="main.jsp"> <パターン>/*</パターン> </デコレータ> </デコレータ> decorators.xml には 2 つの主要なノードがあります。 デコレータ ノードはテンプレートの場所とファイル名を指定し、パターンを使用してどのパスがどのテンプレートを参照するかを指定します。 excludes ノードは、テンプレートを使用しないリクエストのパスを指定します。 たとえば、上記のコードでは、/index.jsp と /login/ で始まるリクエスト パスはテンプレートを使用しません。 もう 1 つ注意すべき点は、decorators ノードの defaultdir 属性が、テンプレート ファイルが保存されるディレクトリを指定することです。 |
<<: 高い同時実行性の下でNginxのパフォーマンスを最適化する方法をまとめます
フロントエンド開発者の必須科目であるCSS3は、多くの基本的なアニメーション効果を実現するのに役立ち...
問題の起源私がタイトルの番号付けの問題に初めて注目したのは、学部の論文を書いていた頃まで遡ります。当...
auto.js を使用して毎日のチェックインを自動化する感染症のせいで、毎日時間通りに家に帰らなけれ...
序文モバイル端末の開発の過程で、モバイル端末のディスプレイはデスクトップ端末のディスプレイとは一般的...
【序文】 ORM を使用してデータベース内のデータを操作する場合、前提として、新しい ORM モデル...
目次0x01. パゴダパネルをインストールする0x02. サーバーポートを開く0x03. ブラウザを...
この記事では、WeChatアプレットの具体的なコードを参考までに共有します。具体的な内容は次のとおり...
1. 元のmariadbを削除します。削除しないとmysqlをインストールできません。 mariad...
簡単に言うと、distinct は重複を削除するために使用され、group by は統計を集計するよ...
Docker の設計では、コンテナは 1 つのアプリケーションのみを実行します。しかし、現在のアプリ...
CenOS6.7 は MySQL8.0.22 (推奨コレクション) をインストールします1. MyS...
1. 問題開発中に、他のデータベースから MySQL データベース テーブルにデータを挿入すると、次...
Apache Log4j2 が核レベルの脆弱性を報告し、スタックリーダーの友人たちは大騒ぎになりまし...
イメージを作成する方法は 3 つあります。既存のイメージに基づいてコンテナを作成する、ローカル テン...
MySQL のデータ ディクショナリは、データベースの重要なコンポーネントの 1 つです。INFOR...