0

単純に実装された tld 関数を使用したいのですが、MyAccessManager は抽象クラスであり、2 つの子が関数を異なる方法でオーバーライドしています。

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

上記のメソッドは、tld 定義ファイル (*.tld) でも定義しました。

MyAccessManager を拡張する 2 つのクラスがあり、次のような EL 経由で関数を使用しています。

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

正しいパラメーター (つまり、子クラスのインスタンスを param1 として) を tld 関数に渡しますが、webapp は以下の例外をスローします。

org.apache.jasper.JasperException: PWC6300: 関数 mytaglib:isAllowed の TLD のメソッド シグネチャで指定されたクラス T が見つかりません。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

なぜあなたが必要なTのかまったくわかりません。

これはポリモーフィズムの典型的なケースです。ここでは型パラメーターやその他の一般的なものは必要ありません。

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

.

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