I need to make some changes to the liferay 7 private messaging portlet and I wanted to ask:
Is there a way to override liferay portal classes using a module ? In my case I want to change the class PrivateMessagingUtil.
Best regards,
Daniel
不看代码:如果有扩展点:使用它。当您命名要更改的类时,我假设没有,因此扩展点可能位于调用此方法的其他类中。不是每个类都有扩展点。如果其他一切都失败了,你将不得不硬着头皮维护一个分支版本——至少它(可能,我没有看过代码)是一个插件,所以大小和影响会相对有限。
如果您想要进行的更改背后有一个好故事,请提交一张票,如果提出实施方案会更好。与组件所有者讨论。
...并在这里分别回答 Daniele 的评论问题:我没有查看代码 - 这就是此类问题的问题:在不同的心情下,我会拒绝这个问题“我想更改 Xxx 类中的一些代码”在评论中有一个反问:“你到底想达到什么目的?” 经常有更好的解决方案,但是当提出这样的技术问题时,任何答案都可能不是最理想的。因为 Breiti 选择了他打算用来解决他的问题的解决方案,所以我坚持我的话——假设他的实际意图,请随意添加一个更好的答案。
您可以自定义 Liferay 7 服务,创建servicewrapper 项目类型。您可以使用命令行创建它:
blade create -t service-wrapper -p com.liferay.docs.serviceoverride -c UserLocalServiceOverride -s com.liferay.portal.kernel.service.UserLocalServiceWrapper service-override
我需要未发送给用户的密码更改确认电子邮件,因此我覆盖了 UserLocalServiceWrapper 类中的 updatePassword 方法并将silentUpdate 传递为true。
@Component(
immediate = true,
property = {
},
service = ServiceWrapper.class)
public class UserLocalServiceOverride extends UserLocalServiceWrapper {
public UserLocalServiceOverride() {
super(null);
}
@Override
public com.liferay.portal.kernel.model.User updatePassword(long userId,
java.lang.String password1, java.lang.String password2,
boolean passwordReset)
throws com.liferay.portal.kernel.exception.PortalException {
return updatePassword(userId,
password1, password2,
passwordReset, true);
}
@Override
public com.liferay.portal.kernel.model.User updatePassword(long userId,
java.lang.String password1, java.lang.String password2,
boolean passwordReset, boolean silentUpdate)
throws com.liferay.portal.kernel.exception.PortalException {
return super.updatePassword(userId, password1, password2,
passwordReset, silentUpdate);
}
}
查看 Liferay 文档中的此链接:
我希望它对你有帮助。