0

他のカスタムタグを使用するカスタムタグを作成しようとしています。

私のアプローチはそうだった:

public int doAfterBody() throws JspTagException {
    BodyContent bc = getBodyContent();
    if (bc!=null) {
        String body = bc.getString().toUpperCase();
        try {
            bc.clearBody();
            bc.getEnclosingWriter().write("<some-other-custom-tag>");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    return SKIP_BODY;
}

BodyContentを使用して記述したものは処理されなくなったため、これは機能していないようです。そのため、JSPからの出力にはまだが含まれています<some-other-custom-tag>。ブラウザに出力される前に出力を処理する方法はありますか?

編集:私はおそらく私の質問をうまく表現していませんでした。(私は思う)コンパイルがどのように機能し、リクエストがどのようにドキュメントに変わるかを知っています。

私が理解しているように、コンパイラは私のJSPを調べて、を見つけ<custom-tag>ます。参照されているTLDを調べて、タグに関連付けられているJavaクラスを見つけます。クラスを呼び出し、パラメータなどを設定してから、次のようなメソッドを実行しますdoAfterBody()(クラスが拡張するタグハンドラのタイプによって異なります)。そこ<some-other-custom-tag>から、JSPの出力に書き込みます。これが機能しないことを理解しています。これは、コンパイラが再度それを調べないため、処理する別のカスタムタグがあることに気付かないためです。

(1)コンパイラに出力(の一部)をもう一度処理させるか、(2)コンパイラにStringオブジェクトを処理<some-other-custom-tag>させて出力に書き込むことができるようにする方法を探しています。

もちろん、私は他の解決策も受け入れています。

4

2 に答える 2

1

カスタム タグから出力されるテキストは、ブラウザが理解できるテキスト (HTML、JavaScript、CSS など) である必要があります。

そのコンテンツはあまり意味がないため、再度解析されることはありません。出力されたコンテンツの解析を停止してブラウザーに送信する必要があることをサーバーが認識した場合はどうなりますか? それを行うことのオーバーヘッドはどうなりますか?.

できることは<some-other-custom-tag>、JSP タグは Java クラスであるため、それによって行われることはすべて Java コードです。タグ クラスをリファクタリングして共通の抽象クラスを拡張し、それを後者で機能的に共有して、両方のカスタム タグにアクセスできるようにします。

于 2012-08-21T13:52:13.440 に答える
0

独自のカスタムタグを誤って使用しています。JSPページでのみ宣言する必要があります。

メソッドで出力しているものはすべてブラウザjspWriter.write()で処理され、ブラウザで処理されます。また、JSPカスタムタグはJSPコンパイラによって解析され、サーバー側で実行可能サーブレットに変換されます。これは、最終データを作成してユーザーに送信する前に行う必要があります。

問題をより正確に理解するには、次の記事を確認してください。

JSPページのライフサイクル

JSPページのカスタムタグ

于 2012-08-21T13:36:43.037 に答える