2009-03-31 12 views
2

JSPを使用してネストされたカスタム・タグを作成しています。私は、これを行う2つの方法があることを理解しています:1)BodyTagSupportを拡張するタグハンドラを書く、2)タグファイルを書き込む。JSPタグ・ファイル:ネストのチェック

第1の方法では、コードは醜いです。現在のストラットタグを組み込む方法を見つけることができませんでした.JspWriterを使用して次のように記述すると、コンパイルされたJSPによって生成された意味のある出力ではなく、最終的なHTML出力でこの文字列が取得されます。

<bean:write name="label"> 

私は第2の方法に目を向けると、タグファイルを書きました。その後、上記の問題は解決されます。しかし、私は親タグのクラスを知らないので、タグの親タグを取得するのに問題があります。私は、

ParentTag parent = 
     (ParentTag)findAncestorWithClass(this, ParentTag.class); 
     if (parent == null) { 
     throw new JspTagException("this tag is outside of its parent tag"); 
     } 

を自分のタグハンドラを書いた場合しかし、私は代わりにタグファイルを使用し、以来、私は、私はかなりその親が何であるかをクラス次のことを知らないんでした。

どうすればこの問題を解決できますか?

答えて

0

私は私はないです...

私はJSPの中に上記のJavaコードを挿入し、JSPページに「親」を渡すためにページ上のパラメータを設定することができることをforgettenているのに十分な愚かでした確かに、私はこの質問を閉じなければならない。答えはやや馬鹿だから。シニアStackOverflowユーザーは助言してください。

1

タグ・ファイルは、タグ・ハンドラのような「クラス」自体ではありません(もちろん、すべてのJSPファイルと同様ですが、私の意味が分かります)。

タグファイルで「ネスト」タグを実行する必要がある場合、私は自分の状態データを「よく知っている名前」の下のリクエストに入れます。 2つのタグの間に共有される「秘密」。その後

<% 
jspContext.setAttribute("_myWellKnownName", new java.util.LinkedHashMap(), PageContext.REQUEST_SCOPE); 
%> 

、後にタグファイルに:私はするかもしれない1つのタグファイルの例については

<% 
    java.util.LinkedHashMap map = (java.util.LinkedHashMap) jspContext.findAttribute("_myWellKnownName"); 
%> 

その後、私は、その変数に私が望むすべてを操作します。

親タグでは、子タグのコードが実行されるため、マップ(この場合)が設定された後で、その時点で必要な処理を実行できます。

私が見つけた基本的なパターンは、子タグの結果をリストのようなものに集め、子がすべての作業を終えた後に実際のデータをページにレンダリングすることです。

私は親が他の親の中に入れ子になっている(つまり、あるタグが別のタグの状態と衝突する)タグを必要としていませんでした。明らかに、この方法の一般的な意味で問題になる可能性があります。しかし、私の目的のためにまだ効果的です。

0

thisが役立ちます。

1:23

マイケル・ブリード2010年11月9日私はこれが今 ほとんど歳ですが、私は自分自身が、私は 私はだろうと思ったファイルのタグを使用してに を探していることが起こると知っています前述の制限 をここで修正してください。実際には、どのJSP用語「 」を使用し、jsp:invoke タグを使用して複数のセクションを に挿入することが可能です。方法は次のとおりです。

関連する問題