在JSP标记中使用静态嵌套类

时间:2015-01-30 07:37:34

标签: java jsp jsp-tags

我在JSP标记文件中引用静态内部类时遇到问题。我正在使用Glassfish Jersey和Jetty 6.1.X.我正在使用JSP 2.0和tagfiles,我没有任何TagHandler类或任何.tld文件。我的web.xml也不包含任何有关JSP或标记文件的特定内容。

我已将问题分解为最小的可重现性:

这是我正在使用的类的结构:

package test;

public class OuterClass {

    public static class InnerClass {

    }
}

这是我的.tag文件的完整内容:

<%@ attribute name="inner" required="true" type="test.OuterClass.InnerClass" %>
<h1>${inner}</h1>

(标签文件在IntelliJ中显示错误):

IntelliJ Error

我在我的父jsp中使用此标记,如下所示:

<%@taglib tagdir="/WEB-INF/tags" prefix="test" %>
<test:test inner="${inner}"/>

尝试以这种方式使用它时得到的例外是:

org.apache.jasper.JasperException: /WEB-INF/jsp/test.jsp(54,4) 
Unknown attribute type (test.OuterClass.InnerClass) for attribute inner

如果我更改类型以使用二进制表示法(OuterClass $ InnerClass),我会收到此错误:

The nested type test.OuterClass$InnerClass cannot be referenced using its binary name 

我已经在谷歌搜索过这个问题,并发现其他人遇到了同样的问题,但所有这些似乎都是通过几年前对Jasper的修复解决的。

https://issues.apache.org/bugzilla/show_bug.cgi?id=41824 https://issues.apache.org/bugzilla/show_bug.cgi?id=35351

我通过将类拆分为许多顶级类来绕过问题,但我的用例中的嵌套类必然属于顶级类,不应该在此之外使用,所以感觉不对由于我在这里找到的限制而改变设计。

如果有一种方法可以在标记属性中正确使用静态嵌套类,那么这将是理想的解决方案。

0 个答案:

没有答案