0

我正在尝试创建一个使用其他自定义标签的自定义标签。

我的方法是这样的:

public int doAfterBody() throws JspTagException {
    BodyContent bc = getBodyContent();
    if (bc!=null) {
        String body = bc.getString().toUpperCase();
        try {
            bc.clearBody();
            bc.getEnclosingWriter().write("<some-other-custom-tag>");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    return SKIP_BODY;
}

这似乎不起作用,因为我使用 BodyContent 编写的任何内容都不再被处理,因此 JSP 的输出仍然包含<some-other-custom-tag>. 有没有办法在输出最终进入浏览器之前对其进行处理?

编辑:我可能没有很好地表达我的问题。(我认为)我知道编译的工作原理以及请求如何变成文档。

据我了解,编译器检查我的 JSP 并找到<custom-tag>. 它查看引用的 TLD 并找到与标记关联的 Java 类。它调用类,设置参数和东西,然后执行类似的方法doAfterBody()(取决于类扩展的标记处理程序的类型)。从那里我写到<some-other-custom-tag>JSP 的输出。我知道这不起作用,因为编译器不会再次查看它,因此没有意识到还有另一个自定义标签要处理。

我正在寻找一种方法来(1)让编译器再次处理(部分)输出,或者(2)让编译器处理包含的 String 对象,<some-other-custom-tag>以便我可以将其写入输出。

当然,我也愿意接受任何替代解决方案。

4

2 回答 2

1

自定义标签的文本输出应该是浏览器能够理解的文本(HTML、JavaScript、CSS 等)。

该内容永远不会再次解析,因为它没有太多意义:当服务器知道它应该停止解析该输出内容并将其发送到浏览器时?这样做的开销是多少?

What you can do is: whatever is done by that <some-other-custom-tag> is Java code anyway since JSP Tags are Java classes. I would refactor the tag classes to extend a common abstract one and then put that shared functionally in the latter so your both custom tags can access it.

于 2012-08-21T13:52:13.440 回答
0

您错误地使用了自己的自定义标签。您只需要在 JSP 页面上声明它。

您使用该方法输出的所有内容都将由浏览器jspWriter.write()处理,将由浏览器处理。JSP 自定义标签由 JSP 编译器解析并转换为服务器端的可执行 servlet。它应该在创建并将最终数据发送给用户之前完成。

查看这些文章以更准确地了解问题:

JSP页面的生命周期

JSP 页面中的自定义标签

于 2012-08-21T13:36:43.037 回答