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

Sea*_*ole 5 java jsp jsp-tags

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

我把问题分解成最小的可重复性:

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

package test;

public class OuterClass {

    public static class InnerClass {

    }
}
Run Code Online (Sandbox Code Playgroud)

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

<%@ attribute name="inner" required="true" type="test.OuterClass.InnerClass" %>
<h1>${inner}</h1>
Run Code Online (Sandbox Code Playgroud)

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

IntelliJ错误

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

<%@taglib tagdir="/WEB-INF/tags" prefix="test" %>
<test:test inner="${inner}"/>
Run Code Online (Sandbox Code Playgroud)

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

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

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

The nested type test.OuterClass$InnerClass cannot be referenced using its binary name 
Run Code Online (Sandbox Code Playgroud)

我已经搜索了Google,并发现其他人遇到了同样的问题,但所有这些似乎都已经解决了几年前对Jasper的修复.

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

我通过将类拆分为许多顶级类来绕过问题,但我的用例中的嵌套类必然属于顶级类,不应在此之外使用,因此更改设计应该是错误的我在这里找到的限制.

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