我想延迟自定义标记的输出。
原因是:我想在文档的头部添加一个标记,该标记将编译要包含在页面中的样式和脚本列表。页面中的后续标记将添加到元素列表中,并且一旦生成页面正文就会打印列表。
这是可能的,还是有更好的方法。 (我不想知道在页面编译期间会添加哪些链接。)
由于
答案 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标签的内容)。
结果是文档可以根据需要加载和重新排列。这仍然是一个基本的版本,但我会完善它并在将来的某个时间发布源代码。