質問
カスタムタグリブを持っているとします:
<%@ 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
これは実行可能ですか?どのように?
ありがとう。
解決
ティアゴ、私はあなたを解決する方法を知りません ちょうど 問題ですが、ファイルから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
他のヒント
あなたが本当に持っている必要があるのはこれです:
<mytaglib:doSomething>
<c:out value="My enclosed tag"/>
Test
</mytaglib:doSomething>
そして、あなたのドタグをこのようなものに変更します
@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());
}
}
JSPボディの含有量がTLDでJSPに設定されていることを確認してください。
<bodycontent>JSP</bodycontent>
なぜDOTAGメソッド内にJSTLタグを書くのですか? Printlnは、ブラウザでレンダリングされると、ブラウザがJSTLタグを理解していないため、ブラウザでレンダリングされると、コンパイルされたJSP(読み取り:サーブレット)に直接入ります。
public class MyTaglib extends SimpleTagSupport {
@Override public void doTag() throws JspException, IOException {
getJspContext().getOut().println("My enclosed tag");
getJspBody().invoke(null);
}
}
オプションで文字列にHTMLタグを追加できます。
所属していません StackOverflow