延迟JSP自定义标记的输出?

时间:2012-08-20 02:10:36

标签: java jsp tags

我想延迟自定义标记的输出。

原因是:我想在文档的头部添加一个标记,该标记将编译要包含在页面中的样式和脚本列表。页面中的后续标记将添加到元素列表中,并且一旦生成页面正文就会打印列表。

这是可能的,还是有更好的方法。 (我不想知道在页面编译期间会添加哪些链接。)

由于

2 个答案:

答案 0 :(得分:1)

使用JSPContext pushBody()popBody(),您可以控制输出顺序。

<%
  Writer body = new StringWriter();
  out = pageContext.pushBody(body);
  // following code will write to 'body' and not to client
%>
...
<%
  out = pageContext.popBody();
  // normal output again
%>
...
<% // write the captured output %>
<%= body %>

尽管它有效,但最好还是因为它非常容易混淆。

答案 1 :(得分:0)

我在各种网站上都提出了这个问题,并没有得到我想要的答案(虽然有些很有创意,谢谢!)所以我最后做了一些关于“最好”的研究“做到这一点的方法。这就是我想出的:

我创建了三个自定义标签,因此我的html如下所示:

<html:page>
    <html:head>
        ...
    </html:head>
    <html:body>
        ...
    </html:body>
</html:page>

页面标记在doStartTag()方法中的REQUEST_SCOPE中创建一个名为“headercontents”的变量,该变量可以编译我想要放在文档头部的输出列表。

head元素只是将其所有正文内容添加到此变量中。

body元素现在什么都不做,只是有一个简单的标记文件。

正文中的任何元素现在都可以使用“headercontents”变量将信息发布到html页面的头部。 (从而链接头部而不是体内所需的任何样式表或脚本。)

然后最后在页面标签的doEndTag()方法中,它打印“headercontents”变量的内容,然后打印自己的内容(html:body标签的内容)。

结果是文档可以根据需要加载和重新排列。这仍然是一个基本的版本,但我会完善它并在将来的某个时间发布源代码。