0

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

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

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

谢谢

4

2 回答 2

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 %>

即使它有效,也可能更好地解决,因为它非常令人困惑。

于 2012-08-20T08:54:56.183 回答
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 标签的内容)。

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

于 2012-08-22T22:43:47.887 回答