0

com.liferay.portal.model.Group の getDescriptiveName() メソッドをオーバーライドしようとしています

ラッパー(com.liferay.portal.model.GroupWrapper)を見つけたので、ドキュメントに書かれているようにフックを書いてみました:

liferay-hook.xml:

<service>
    <service-type>com.liferay.portal.model.GroupWrapper</service-type>
    <service-impl>fr.villedeniort.hook.expando.GroupWrapperImpl</service-impl>
</service>

fr.villedeniort.hook.expando.GroupWrapperImpl.java:

public class GroupWrapperImpl extends GroupWrapper {
    public GroupWrapperImpl(Group group) {
    super(group);
}

@Override
public java.lang.String getDescriptiveName()
  throws com.liferay.portal.kernel.exception.PortalException,
  com.liferay.portal.kernel.exception.SystemException {
    return super.getDescriptiveName();
}

フックがデプロイされると、例外が発生します:

java.lang.NoSuchMethodException: fr.villedeniort.hook.expando.GroupWrapperImpl.<init>(com.liferay.portal.model.GroupWrapper)

無視する理由で、この部分で壊れていることがわかったコードを参照します。

Constructor<?> serviceImplConstructor = serviceImplClass.getConstructor(new Class<?>[] {serviceTypeClass});

この時点で、変数にはこれらの値があります。

serviceType "com.liferay.portal.model.GroupWrapper" (id=14829)
serviceImpl "fr.villedeniort.hook.expando.GroupWrapperImpl" (id=14830)
serviceTypeClass Class<T> (com.liferay.portal.model.GroupWrapper) (id=14831)
serviceImplClass Class<T> (fr.villedeniort.hook.expando.GroupWrapperImpl) (id=14832)

何か考えはありますか?

ありがとう!

4

2 に答える 2

0

どうやら、サービス以外のクラスをフックすることはできないので、私は別の方法を見つけなければなりませんでした。私の場合、JSPをフックし、フックから正しい説明的な名前を取得するための独自のメソッドを作成しました。

于 2011-06-08T15:08:03.197 に答える
0

引数のないコンストラクターも必要です。これで、コンストラクター引数を持つものがありますが、Java がクラス インスタンスを作成するときに検索する純粋なクラス コンストラクターはありません。純粋なコンストラクタ java を呼び出した後、引数付きのコンストラクタを呼び出します。

他のコンテキストでも同様のケースがありましたが、これが解決策でした。<init>エラーメッセージのタグは、この種の問題を指します。

于 2011-06-01T19:40:08.777 に答える