-2

私はこのようなアクション応答をキャストしようとしました:

 private void mappingMethod(ActionResponse response) {

        ActionResponseImpl actionResponseImpl = (ActionResponseImpl)response;
...}

「式の評価」ウィンドウでデバッグすると、「応答」のタイプが ActionResponseImpl であり、キャストによって例外が発生しないことがわかります。しかし、実行時には次の例外があります。

java.lang.ClassCastException: com.liferay.portlet.ActionResponseImpl は com.liferay.portlet.ActionResponseImpl にキャストできません

何が問題なのか教えてください。

PS: PortalImpl クラスでは、copyRequestParameters メソッドに同じ文字列がありますが、ここでは機能しています....

4

4 に答える 4

3

portal-impl.jarカスタムプラグインポートレットでのクラスの使用を控えた方がよいでしょう。

ActionResponseImplのクラスportal-impl.jarです。したがって、このクラスの使用を計画している理由についてユースケースを示すことができれば、代替案を提案できます。

于 2012-10-26T10:57:35.463 に答える
1

クラスパスに ActionResponseImpl が 2 回あります。Liferay のどの jar をプロジェクトに含めましたか? Prakash が言及しているように、それは portal-impl.jar であり、プラグインに含めることはできません。

ClassCastException が伝えたいことは、クラスは ActionResponseImpl の 1 つの実装を拡張するが、ランタイム環境はそれが別の実装であることを期待しているということです。それらは同一である可能性がありますが、2 つの異なるソースからロードされるため、クラスローダーは相互に参照できません。それが拡張するよりもスーパークラス。

于 2012-10-26T12:24:04.750 に答える
0

XHTML ページから Ajax を使用してメソッドを呼び出すと、この問題が発生しました。単純な文字列を返すようにメソッドを変更し、actionResponseImpl を変更しようとするコードを削除して問題を解決しました。

于 2012-10-26T13:15:54.117 に答える