2

BodyContent を評価する前に 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. 使用するだけで他のチーム メンバーの JSP 開発を簡素化したい<myTag:*/>

  2. また、MyTag.Java で一部の HTML 出力をハードコーディングしたくありません。そのため、外部ファイルから JSP フラグメントを読み取り、実行時に挿入したいと考えています。

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

4

1 に答える 1

1

JSP ファイルはサーブレットに変換され、その時点で JSP タグの呼び出しコードも生成されます。基本的に、サーブレット コンテナはタグ インスタンスのプールを使用してタグをインスタンス化しますが、いずれにしても、これらのインスタンスはコンテナによって直接公開されません。

タグ ハンドラ内には、JSP コードの概念はありません。タグ ハンドラは「金属に近い」(いわば) ものであり、ここでは応答に直接書き込むことしかできません。JSP コードは評価できません。本文の内容は、この時点で既に評価されています。

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

のようなもの<%=request.getAttribute("theme")%>はここでは意味がなく、クライアントに直接送信されます (そのまま)。自分自身を評価${theme}できるような EL 式に制限する場合、そこに何らかの JSP コードを含めることができますが、外部コードがより複雑になるにつれて、これは非常に複雑になります。

やりたいこと、またはサーブレット コンテナーが実装する仕様に応じて、別の解決策としてJSP 2.0 タグ ファイルを使用することもできます。状況に応じてそれが役立つかどうかを確認してください ( JSPFragmentをビルドできればよかったのに)開発者によるものですが、残念ながらそれはコンテナーの実装です)。

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

于 2012-04-17T20:00:43.320 に答える