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

您还应该有一个没有任何参数的构造函数。现在您有了一个带有构造函数参数的构造函数,但是当 java 创建类实例时,没有一个纯类构造函数可供 java 搜索。在调用纯构造函数 java 之后,调用参数化的构造函数。

我在其他一些情况下也有类似的情况,这就是解决方案。<init>错误消息上的标签是指此类问题。

于 2011-06-01T19:40:08.777 回答
0

显然,不可能挂钩除服务之外的其他类,所以我必须找到不同的方法。就我而言,我挂钩了一个 JSP 并编写了自己的方法来从挂钩中获取正确的描述性名称。

于 2011-06-08T15:08:03.197 回答