2012-04-16 15 views
2

評価する前にBodyContentにいくつかのJSPフラグメントを挿入するにはどうすればいいですか?私はさまざまな方法を試みましたが、どれも効果がありませんでした。私は間違ったことをする必要があります。評価の前にBodyTagにJSPコードを注入しますか?

例えば、私は誰かのように私のタグを使用したい:

<mytag:html> 
    <mytag:head> 
     <link href="test.css"></link> 
    </mytag:head> 

それは右の頭の後に(設定ファイルから読み込み)JSPフラグメントを挿入することができます。

<link href="<%=request.getAttribute("theme")%>/test.css"/> 

し、それをだろう最終的に出力:ここ

<html> 
    <head> 
    <link href="target-theme/test.css"></link> 
    <link href="test.css"></link> 
    </head> 

は、私が何をしたいです:

  1. 私はちょうど<myTag:*/>

  2. を使用して、私はMyTag.JavaにいくつかのHTML出力をハードコーディングしたくないことで、他のチームメンバーのJSP開発を簡素化します。だから、私は外部ファイルからいくつかのJSPフラグメントを読んで、実行時にそれを注入したいのです。

TagSupportを使用してこれを達成する方法の例/スニペットはありますか?

答えて

1

JSPファイルはtransformed to servletsであり、その時点でJSPタグの呼び出しコードも生成されます。基本的にサーブレットコンテナinstantiates your tags。タグインスタンスのプールを使用することもありますが、これらのインスタンスはコンテナによって直接公開されません。

タグハンドラの内部には、JSPコードの概念はありません。タグハンドラは「金属に近い」(いわば)ため、ここではレスポンスに直接書き込むことしかできません。 JSPコードを評価することはできません。ボディコンテンツは、この時点で既に評価されています。

タグハンドラにJSPフラグメントを挿入することはできませんが、タグハンドラ自体がその外部ファイルからコンテンツをプルすることができます。しかし、それは静的コンテンツになります!

<%=request.getAttribute("theme")%>のようなものはここで意味を持たず、そのままクライアントに送信されます(そのまま)。 ${theme}のようなEL式に限定すると、ある種のJSPコードがあるかもしれませんが、それはevaluate yourselfとなる可能性がありますが、外部コードが複雑になるほど非常に複雑になります。

あなたの目的やサーブレットコンテナが実装する仕様によっては、the JSP 2.0 tag filesを使用することもできます。それがあなたの状況に役立つかどうかを確認してください(JSPFragmentが構築可能な場合はうれしいでしょう)しかし、残念ながらそれはコンテナの実装です)。

あなたがしていることは、他のJSPコードの出力であるdecoratingとして実際に私に聞こえます。開発を簡素化し、後で出力の上に追加する場合は、チェックアウトSiteMeshもチェックしてください。それはあなたが達成しようとしていること(そしてそれ以上)を行うことができるウェブページのレイアウトとデコレーションフレームワークです。

関連する問題