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

时间:2015-04-01 09:57:59

标签: java jsp jboss7.x custom-tags

以下代码在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>

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

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

的tld验证失败了

在JBoss 7中,它适用于<body-content>scriptless</body-content>。但是,我在<%= contextPath%>标记内有<jsp:expression><xml>等脚本。

如何解决?

1 个答案:

答案 0 :(得分:0)

<xml>设置为无脚本后,会处理

子标记<body-content>。并且,已使用自定义标记替换<xml>标记内的脚本。