カスタムタグの出力を遅らせたい。
その理由は、ページに含めるスタイルとスクリプトのリストをコンパイルするタグをドキュメントの head に追加したいからです。ページ内の後続のタグは要素のリストに追加され、ページの本文が生成されるとリストが出力されます。
これは可能ですか、それともより良い方法がありますか。(ページのコンパイル中にどのリンクが追加されるかを知る必要はありません。)
ありがとう
JSPContext pushBody()
を使用popBody()
すると、出力の順序をある程度制御できます。
<%
Writer body = new StringWriter();
out = pageContext.pushBody(body);
// following code will write to 'body' and not to client
%>
...
<%
out = pageContext.popBody();
// normal output again
%>
...
<% // write the captured output %>
<%= body %>
動作しますが、非常に紛らわしいため、回避する方がよい場合があります。
私はさまざまなサイトでこの質問をしましたが、探していた答えが得られませんでした (創造的なものもありましたが、ありがとう!)。これを行う。これは私が思いついたものです:
3 つのカスタム タグを作成したので、html は次のようになります。
<html:page>
<html:head>
...
</html:head>
<html:body>
...
</html:body>
</html:page>
ページ タグは、ドキュメントの先頭に配置する出力のリストをコンパイルできる doStartTag() メソッドの「headercontents」と呼ばれる REQUEST_SCOPE 内の変数を作成します。
head 要素は、その body コンテンツのすべてをこの変数に単純に追加します。
body 要素は今のところ何もしません。単純な .
本文のすべての要素で、「headercontents」変数を使用して、情報を HTML ページの先頭に投稿できるようになりました。(したがって、必要なスタイルシートまたはスクリプトは、本文ではなく頭でリンクします)。
最後に、ページタグの doEndTag() メソッドで、「headercontents」変数の内容を出力してから、それ自体の内容 (html:body タグの内容) を出力します。
その結果、必要に応じてドキュメントを読み込んで再配置できるようになります。これはまだ初歩的なバージョンですが、私はそれを完成させ、将来いつかソースコードを投稿します.