java - 在 TLD 函数中使用类型参数

标签 java tld

我想使用一个简单实现的 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。

我的顶级域名文件:

<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 的类型参数吗?或者说有什么办法可以实现这样的功能吗?

最佳答案

我根本不明白为什么你需要T

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

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

.

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

关于java - 在 TLD 函数中使用类型参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11879304/

相关文章:

java - 使用 Java 访问 URL

java - 如何将只读模式设置为 JPanel

php - 如何检查 URL 是否具有有效的公共(public) TLD?

java - JSP 中的标记库与 scriptlet

visual-studio - 为 TLD 运行 compile.m 时出错

java - 如何找出编译的 GWT 应用程序未初始化但在托管模式下工作的原因?

java - 如何将知识陈述/关系从文本文件映射到(有向)图

java - 有没有更好的方法来处理此方法中的逻辑条件?

javascript - 搜索具有新通用 TLD 的域名文本

django - 如何在本地测试使用 example.com 域访问它的 Django 项目?