0

我想使用一个简单实现的 tld 函数, MyAccessManager 是一个抽象类,并且有 2 个孩子以不同的方式覆盖一个函数:

public static <T extends MyAccessManager> boolean isAllowed(T accessMan, MyTypeEnum otherUsersEnum){
    // trivial implementation
}

我也在我的 tld 定义文件 (*.tld) 中定义了上述方法。

我有 2 个类扩展了我的 MyAccessManager 并且我正在通过 EL 使用函数,例如:

<input name="foo" type="hidden" value="${mytaglib:isAllowed(param1, param2)}"/>

我将正确的参数(即子类实例作为 param1)传递给我的 tld 函数,但 webapp 抛出以下异常:

org.apache.jasper.JasperException: PWC6300: 在 TLD 中的方法签名中为函数 mytaglib:isAllowed 指定的类 T 找不到。吨

我的 tld 文件:

<function>
      <description>Processes users access to specific resources</description>
      <name>isAllowed</name>
      <function-class>com.myproj.MyUtil</function-class>
      <function-signature>boolean isAllowed(T,com.myproj.MyTypeEnum)</function-signature>
</function>

TLD 不支持 java 的类型参数吗?或者,有没有办法实现这样的功能?

4

1 回答 1

1

I don't understand why do you need T at all.

It's a typical case of polymorphism, you don't need type parameters and other generic stuff here:

public static boolean isAllowed(MyAccessManager accessMan, MyTypeEnum otherUsersEnum){ ... }

.

<function-signature>boolean isAllowed(MyAccessManager,com.myproj.MyTypeEnum)</function-signature>  
于 2012-08-09T09:11:21.550 回答