jsp 自定义标记:未调用 doAfterBody 方法

jsp Custom Tag: doAfterBody method is not invoked

下面的代码在 JBoss 7 中不起作用。我也在 Tomcat 7 中测试过它。

根本原因是构造函数和没有为 <xml> 标记调用 doAfterBody 方法。即使它正在为父标记 <xslt>.

调用

当子标签 <xml> 移到 <xslt> 之外时,它会起作用。这意味着无法识别子标签。

.tld 文件:

<?xml version="1.0" encoding="UTF-8"?>

<taglib>
  <tlib-version>1.0</tlib-version>
  <jsp-version>1.2</jsp-version>
  <short-name>xx</short-name>
  <uri></uri>

  <tag>
    <name>xml</name>
    <tag-class>com.mycompany.XsltXmlTag</tag-class>
    <body-content>tagdependent</body-content>
  </tag>

  <tag>
    <name>xslt</name>
    <tag-class>com.mycompany.XsltTag</tag-class>
    <body-content>tagdependent</body-content>
  </tag>

</taglib>

标签 class 用于 <xml> 标签:

public class XsltXmlTag extends BodyTagSupport {

    public XsltXmlTag() {
        log("constructor not invoked.");
    }

    public int doAfterBody() throws JspException {
        log("this method is not invoked.");
        ...
    }

    ...
}

jsp:

<%@ taglib uri="xmlx.tld" prefix="x"%>

...

<x:xslt media="html">
    <x:xml>
        <?xml version="1.0" ?>
        ...
    </x:xml>

    ...
</x:xslt>

它在 Tomcat 7 中工作,在将 <body-content> 设置为 jsp 而不是 tagdependent 之后。但是,在 JBoss 7 中,<body-content>jsp</body-content>

的顶级域名验证失败

在JBoss7中,它与<body-content>scriptless</body-content>一起工作。但是,我在 <xml> 标签内有 <%= contextPath%><jsp:expression> 等脚本。

如何解决?

子标签 <xml> 在将 <body-content> 设置为无脚本后处理。并且,已将 <xml> 标签内的脚本替换为自定义标签。