2008-09-08 20 views
0

動的コンテンツ(ネストされたタグ)の組み込みカスタムタグはレンダリングされません。動的コンテンツ(ネストされたタグ)の埋め込みカスタムタグ

私はjavabeanから動的コンテンツを取得し、HTMLの処理のためにオブジェクトのリストをカスタムタグに渡すページを持っています。各オブジェクト内には、レンダリングしたい第2のカスタムタグを含むhtmlの束が出力されます。問題は、タグ呼び出しがプレーンテキストとしてレンダリングされることです。

例がわかりやすいかもしれません。

1データベースから情報を引き出し、javabean経由でページに戻します。この情報をカスタムタグに送信して出力します。

<jsp:useBean id="ImportantNoticeBean" scope="page" class="com.mysite.beans.ImportantNoticeProcessBean"/> <%-- Declare the bean --%> 
<c:forEach var="noticeBean" items="${ImportantNoticeBean.importantNotices}"> <%-- Get the info --%> 
    <mysite:notice importantNotice="${noticeBean}"/> <%-- give it to the tag for processing --%> 
</c:forEach> 

このタグがなければならない出力そう

*SNIP* class for custom tag def and method setup etc 
out.println("<div class=\"importantNotice\">"); 
out.println(" " + importantNotice.getMessage()); 
out.println(" <div class=\"importantnoticedates\">Posted: " + importantNotice.getDateFrom() + " End: " + importantNotice.getDateTo()</div>"); 
out.println(" <div class=\"noticeAuthor\">- " + importantNotice.getAuthor() + "</div>"); 
out.println("</div>"); 
*SNIP* 

これは微細かつ上記の例では、例えば、私がした、場合

<div class="importantNotice"> 
    <p>This is a very important message. Everyone should pay attenton to it.</p> 
    <div class="importantnoticedates">Posted: 2008-09-08 End: 2008-09-08</div> 
    <div class="noticeAuthor">- The author</div> 
</div> 

2予想されるようにレンダリングのようなボックスDIV importantNotice.getMessage()にカスタムタグがあります。文字列:

*SNIP* "This is a very important message. Everyone should pay attenton to it. <mysite:quote author="Some Guy">Quote this</mysite:quote>" *SNIP* 

重要な注意書きはうまくいきますが、見積もりタグは処理されず、単純に文字列に挿入され、プレーンテキスト/ htmlタグとして配置されます。

<div class="importantNotice"> 
    <p>This is a very important message. Everyone should pay attenton to it. <mysite:quote author="Some Guy">Quote this</mysite:quote></p> 
    <div class="importantnoticedates">Posted: 2008-09-08 End: 2008-09-08</div> 
    <div class="noticeAuthor">- The author</div> 
</div> 

よりもむしろ

<div class="importantNotice"> 
    <p>This is a very important message. Everyone should pay attenton to it. <div class="quote">Quote this <span class="authorofquote">Some Guy</span></div></p> // or wahtever I choose as the output 
    <div class="importantnoticedates">Posted: 2008-09-08 End: 2008-09-08</div> 
    <div class="noticeAuthor">- The author</div> 
</div> 

私は、これは、プロセッサとプリプロセッサに関係しています知っているが、私はこの仕事を作る方法について確認していないです。

答えて

1

だけ

<bodycontent>JSP</bodycontent> 

を使用することは十分ではありません。

JspFragment body = getJspBody(); 
StringWriter stringWriter = new StringWriter(); 
StringBuffer buff = stringWriter.getBuffer(); 
buff.append("<h1>"); 
body.invoke(stringWriter); 
buff.append("</h1>"); 
out.println(stringWriter); 

(例はSimpleTag doTagメソッド用です)のようにしなければなりません。

しかし、質問のコードでは、内部タグがJSPの一部としてレンダリングされない文字列から来ていることがわかりますが、ランダムな文字列があります。私はあなたがそれを解析するようにJSPトランスレータを強制することはできないと思います。

あなたはあなたのケースで正規表現を使用するか、またはこのようなJSPを持っているように、あなたのコードを再設計しようとすることができます:

<jsp:useBean id="ImportantNoticeBean" scope="page class="com.mysite.beans.ImportantNoticeProcessBean"/> 
<c:forEach var="noticeBean" items="${ImportantNoticeBean.importantNotices}"> 
    <mysite:notice importantNotice="${noticeBean}"> 
     <mysite:quote author="Some Guy">Quote this</mysite:quote> 
     <mysite:messagebody author="Some Guy" /> 
    </mysite:notice> 
</c:forEach> 

私は正規表現で行くwhould。

0

達成したいデータが、ページのために設計された "マークアップ"のように、クラス内部のタグではいけないという点で、あなたのタグ付けのアーキテクチャを変更する傾向があります(obscurity JSPサーブレットエンジンの評価プログラムスレッドを取得することができます)。あなたは、おそらく標準的な手順内でより良く、より多くのBodyTagSupportクラスの拡張で、「協力タグ」を使用することになり見つけると、プロセスに、このようなretrivedの格納など身体および/またはオブジェクトの共有を繰り返すためには、doStartTag()メソッドでEVAL_BODY_BUFFEREDを返します何

セッションのアプリケーション階層内のデータまたはユーザーのセッション上のデータ。

詳細については、oracle j2ee custom tags tutorialを参照してください。

関連する問題