在TLD函数中使用类型参数

时间:2012-08-09 08:17:22

标签: java tld

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

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的类型参数吗?或者,有没有办法实现这样的功能?

1 个答案:

答案 0 :(得分:1)

我不明白为什么你需要T

这是多态的典型案例,你不需要类型参数和其他通用的东西:

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

<function-signature>boolean isAllowed(MyAccessManager,com.myproj.MyTypeEnum)</function-signature>