Java]もともとSAStrutsなどのJava開発フレームワークの基盤ではTaglibと言われるタグライブラリ(API)がいくつか用意されています。提供されているプラグイン・ライブラリが使い放題になります。一度記述さえしておけば、そのファイル上ならどこでも呼び出せる上に、ウェブコンテンツを生成する際には便利な機能が豊富で画面デザイン・処理を共通化できるのが特徴的です。イントラマートにも専用のTaglibがあり、私も頻繁に利用しています。開発しているプロジェクトの画面・機能を共通化するには非常にありがたいですね。このTaglibの目的は共通利用する処理をプラグイン化したり、JSP上で毎回似たような記述・処理をコーディングする手間を大幅にカットできるなどチーム開発する上ではかなりの効果を発揮します。一度作ってしまえばものすごく楽なものです。軽くどんなものかを書いていこうと思います。知っている方は飛ばしてかまいません。タグライブラリは簡単に説明するとウェブコンテンツ上で実装できるHTMLタグのような記述文のこと指します。JSPプログラマ用のタグの作成に使用できる強力な機能が提供されています。JSPファイルのヘッダ部に以下のタグライブラリのインポート文を書き加えたとします。uri="http://www.intra-mart.co.jp/taglib/imui"%>その後述の任意の場所に以下のカスタムタグを利用します。/></imui:tabItem></imui:tabs>この例のタグライブラリはイントラマート専用のものになりますが、JSP上にインポートしたタグライブラリの機能を利用できます。ちなみに最初のインポート文のprefix属性に指定した「imui」という文字列をそのままカスタムタグに使用しています。処理結果がJSP上に出力される仕組みです。実際にこのカスタムタグを実装したウェブページを確認するとこのようになっています。前述のカスタムタグがJavaプログラムにより変換されタブが2個あるボックスがHTMLタグとして出力されていますね。ここからはそんなTaglibを簡単に作ることができますので、その方法を今回ご紹介したいと思います。Taglibを生成するにはTagインターフェースを実装JSPタグライブラリを実装するには制御用のJavaクラスを実装する必要があります。定義するJavaクラスは複雑な処理をしないのであれば、ひとつで構いません。パッケージ名も任意のもので問題ないです。この例で列挙するクラス名は「SampleTag」にしたいと思います。必要なメソッドも含め以下に記述しています。SKIP時は実行されない。tldファイルの<body-content>の値がemptyでは実行されない。タグ処理を開放します。SKIP時は実行されない。tldファイルの<body-content>の値がemptyでは実行されない。タグ処理を開放します。{}}かなり長いですが、ここまでのJavaの記述によって、タグライブラリの実装処理が行なわれます。正直なところこれを見ただけでもピンとこないと思いますので、ソースコード内のコメント「タグライブラリの実装メソッドの定義.」以下のメソッドを見て下さい。フローチャートで表すとこのような処理になっています。JSPで実装したカスタムタグを識別して、上記の処理フローが流れていきます。「カスタムタグの開始」までに、JSP上のタグ情報、カスタムタグに指定した属性などの情報をセッターメソッドを通してフィールド変数に格納します。今回の例ではインターフェースにTagとBodyTagを使用していますが、BodyContent(タグを囲った中間部分の文字列データ)を使わないのであればTagだけの実装で問題ないです。ちなみに中間部分とは以下の通りです。</終了タグ>まず初めにdoStartTagメソッドで実装した処理が動作します。JspWriterクラスでPageContext(タグを実装したJSPのページ情報)を取得して、printもしくはwrite関数で開始タグが記述された位置に文字列データを出力できます。戻り値はint型ですが、その値によってフローの動きが変化します。指定する戻り値はフローを参考にしてもらえば良いと思います。スポンサードリンクインターフェースにBodyTagを実装していないと「EVAL_BODY_BUFFERED」「EVAL_BODY_AGAIN」を使用できませんのでご注意を。各メソッドただ順番通りにメソッドが呼び出されているだけなので、カスタムタグを通してJSPに出力したい情報を位置関係を考えてコードを書いてあげるだけですね。慣れれば非常にシンプルで単純な処理です。ここまでが処理の説明でしたが、カスタムタグではJSPに記述したタグに属性値を指定できます。好きな属性名とその値を指定することで、その属性名及び値をJava側で利用できます。作成したTaglibをウェブサーバ側に認識させるにはtldファイルというものが必要になります。Descriptorの略のことで、タグライブラリを作成する場合に使います。JSPで実装したタグリブのカスタムタグとJavaの処理を結合するための中間ファイルのようなものです。このファイルがある意味一番重要です。以下のtldファイルの記述を確認して下さい。JSP上で利用可能なタグライブラリを管理します。JSP上で利用可能なタグライブラリを管理します。--><name>value</name><required>false</required><rtexprvalue>true</rtexprvalue></attribute></tag></taglib>手始めに用意したSampleTagクラスの実装に合わせて、tldファイルに必要な情報を記載しています。最初のタグの記述は共通のものになるので、tldファイルを生成時は合わせて書きます。重要な部分は「プラグインの定義.」コメント行以下になります。<tag>タグに囲まれた部分がカスタムタグの設定部分の記述になります。詳しい説明はソースコード上に載せています。<tag>タグ内の<attaribute>はカスタムタグの属性値の設定部分です。使用したい属性を任意で追加できますので、使いたい分だけattributeタグを記述します。<tag></tag>部分の記述を付け加えることで、別のタグリブの処理も一括で記述できます。その場合はJavaクラスも並行して用意する必要はありますね。記述したtldファイルはウェブサーバ上のとあるディレクトリに配置します。C:\intra-mart\resin-pro-4.0.43\webapps\imart\WEB-INF\tld\yokki-tags.tld1C:\intra-mart\resin-pro-4.0.43\webapps\imart\WEB-INF\tld\yokki-tags.tld上記はイントラマートで使用しているresinサーバのフォルダパスを指定しています。「imart」はアプリケーション名でイントラマートで利用しているルートディレクトリです。基本的には「WEB-INF」直下の「tld」に配置すれば良いでしょう。tldファイルの名前は任意で構いません。(今回はyokki-tags.tldにします。)ここまで用意することでやっとJSP上でカスタムタグを使用できるようになります。タグライブラリで外部JSPを読み込みリクエストを送信する方法おまけですが、今回実装したJavaクラスのソース内に、sample.jspという外部JSPを読み込む処理を記載しています。doAfterBodyメソッドの冒頭に記述したソース文です。{e.printStackTrace();}分かりづらいので5~12行目の処理を見ます。外部JSPファイルの情報をリクエストパラメータとして渡しています。外部JSPにセットします。ちなみに1~3行に実装したサーバリクエストのパラメータも含まれます。この1~3行目の処理はpageContext内にvalueというIDでカスタムタグのvalue属性値をそのままセットしています。ボディコンテントの出力処理bodyContent.writeOut(out)最後の方で外部JSPの情報を含めた文字列データをボディコンテントに出力しています。ボディコンテントはカスタムタグの開始タグと終了タグの間に出力されます。仕組みとしては以上です。あとは今回使用する外部JSPファイルをサーバリソースに定義します。/>タグライブラリをJSP上で実装し呼出す試しに、今回作成したタグライブラリのカスタムタグを出力させたいJSPに記述してみます。value="値を表示します"><p>ボディ部の記述</p></yokki:sampleTag>記述してウェブブラウザで確認すると以下のような状態になると思います。処理から表示するまでの流れがわかると思います。以上で自作タグライブラリをイントラマートで使用することができます。最新の記事よっきパソコンが大好きな青年。職業はプログラマ/SE。フリーランスとしてウェブサイトの構築・保守の業務に従事。専門学校とパソコンスクールで講師も担当。幼少期からパソコンが大好きで、趣味がそのまま仕事に転じた。自作PCの魅力に惹かれたのは学生時代の頃。自作PC専門ブログで、お得な情報を紹介しています。最終更新日:2017年8月17日コメントを残す返信をキャンセルする。published)サイト上に表示された文字を入力してください。業:IT系の講師/フリーランスJavaやPHPなどを中心にWEB系エンジニアとして活動しています。自作PCの魅力にハマり、何台も組み立て経験は豊富。自作PCアドバイザー的なこともやってるので、気軽にご相談下さい!!趣味でホームページ制作をしています。お仕事の依頼をしてみませんか?WordPressテーマ・プラグイン開発、自作PC組立代行などお仕事の依頼はこちらでお願いします。Reserved.このページの先頭へ。