【问题标题】:jsp Custom Tag: doAfterBody method is not invokedjsp自定义标签:doAfterBody方法没有被调用
【发布时间】:2015-06-05 22:09:12
【问题描述】:

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

&lt;xml&gt; 标签的标签类:

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 中工作,在将 &lt;body-content&gt; 设置为 jsp 而不是依赖于标签之后。但是,在 JBoss 7 中,&lt;body-content&gt;jsp&lt;/body-content&gt; 的 tld 验证失败

在 JBoss 7 中,它适用于 &lt;body-content&gt;scriptless&lt;/body-content&gt;。但是,我在&lt;xml&gt; 标签内有诸如&lt;%= contextPath%&gt;&lt;jsp:expression&gt; 之类的脚本。

如何解决?

【问题讨论】:

    标签: java jsp jboss7.x custom-tags


    【解决方案1】:

    &lt;body-content&gt; 设置为无脚本后处理子标记&lt;xml&gt;。并且,已将 &lt;xml&gt; 标签内的脚本替换为自定义标签。

    【讨论】:

      猜你喜欢
      • 2014-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-08
      • 1970-01-01
      • 2014-05-11
      相关资源
      最近更新 更多