6

カスタムtaglibがあるとします。

<%@ taglib uri="http://foo.bar/mytaglib" prefix="mytaglib"%>
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c"%>

<mytaglib:doSomething>
  Test
</mytaglib:doSomething>

taglibクラス内で、テンプレートを処理し、JSPにその出力を再評価するように指示する必要があります。たとえば、次のような場合です。

public class MyTaglib extends SimpleTagSupport {

  @Override public void doTag() throws JspException, IOException {
    getJspContext().getOut().println("<c:out value=\"My enclosed tag\"/>");
    getJspBody().invoke(null);
  }
}

私が持っている出力は次のとおりです。

<c:out value="My enclosed tag"/>
Test

実際にこれを出力する必要がある場合:

My enclosed tag
Test

これは実行可能ですか?どのように?

ありがとう。

4

3 に答える 3

2

ティアゴ、私はあなたの正確な問題を解決する方法を知りませんが、ファイルからJSPコードを解釈することができます。RequestDispatcherを作成し、JSPを含めるだけです。

    public int doStartTag() throws JspException {
    ServletRequest request = pageContext.getRequest();
    ServletResponse response = pageContext.getResponse();

    RequestDispatcher disp = request.getRequestDispatcher("/test.jsp");
    try {
        disp.include(request, response);
    } catch (ServletException e) {
        throw new JspException(e);
    } catch (IOException e) {
        throw new JspException(e);
    }
    return super.doStartTag();
}

このコードをLiferayポートレットでテストしましたが、とにかく他のコンテキストでも機能するはずです。そうでない場合は、知りたいです:)

HTH

于 2010-07-04T01:24:26.860 に答える
1

あなたが本当に持っている必要があるのはこれです:

<mytaglib:doSomething>
  <c:out value="My enclosed tag"/>
  Test
</mytaglib:doSomething>

doTagを次のように変更します

@Override public void doTag() throws JspException, IOException {
try {
   BodyContent bc = getBodyContent();
   String body = bc.getString();
   // do something to the body here.
   JspWriter out = bc.getEnclosingWriter();
   if(body != null) {
     out.print(buff.toString());
   }
 } catch(IOException ioe) {
   throw new JspException("Error: "+ioe.getMessage());
 }
}

tldでjsp本文の内容がjspに設定されていることを確認してください。

<bodycontent>JSP</bodycontent>
于 2010-02-24T15:12:32.860 に答える
0

doTagメソッド内にJSTLタグを書き込むのはなぜですか?printlnはコンパイルされたJSPに直接入ります(読み取り:サーブレット)これがブラウザでレンダリングされると、ブラウザはJSTLタグを認識しないため、そのまま印刷されます。

public class MyTaglib extends SimpleTagSupport {
      @Override public void doTag() throws JspException, IOException {
        getJspContext().getOut().println("My enclosed tag");
        getJspBody().invoke(null);
      }
    }

オプションで、文字列にHTMLタグを追加できます。

于 2010-03-18T11:46:13.030 に答える