JSP Custom Taglib:嵌套评估

说我有我的自定义taglib:

   Test  

在taglib类中,我需要处理一个模板并告诉JSP重新评估它的输出,例如,如果我有这个:

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

我的输出是:

  Test 

当我真的需要输出这个:

 My enclosed tag Test 

这可行吗? 怎么样?

谢谢。

Tiago,我不知道如何解决您的确切问题,但您可以从文件中解释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 portlet中测试了这段代码,但我相信它应该适用于其他环境。 如果没有,我想知道:)

HTH

你真正需要的是这个:

   Test  

并将你的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 body内容设置为jsp:

 JSP 

为什么要在doTag方法中编写JSTL标记? println直接进入已编译的JSP(读取:servlet)当它在浏览器中呈现时,它将按原样打印,因为浏览器不理解JSTL标记。

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

您可以选择将HTML标记添加到字符串中。