更改现有 Liferay 7 类

Change Existing Liferay 7 classes

我需要对 liferay 7 私人消息 portlet 进行一些更改,我想问一下:

有没有办法使用模块覆盖 liferay 门户 classes?就我而言,我想更改 class PrivateMessagingUtil.

此致,

丹尼尔

不看代码:如果有一个扩展点:使用它。当您命名要更改的 class 时,我假设有 none,因此扩展点可能在调用此方法的其他 class 中。并非每个 class 都有扩展点。如果一切都失败了,你将不得不硬着头皮维护一个分支版本 - 至少它是(可能,我没有看过代码)一个插件,所以大小和影响会相对有限。

如果您想进行的更改背后有一个好故事,请file a ticket,如果有建议的实施则更好。与组件所有者讨论。

...并在这里单独回答 Daniele 的评论问题:我没有看代码 - 这就是这类问题的问题:如果心情不同,我会拒绝这个问题 "I want to change some code in class 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

我需要未发送给用户的密码更改确认电子邮件,因此我重写了 class 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 文档的 link:

https://dev.liferay.com/es/develop/tutorials/-/knowledge_base/7-0/customizing-liferay-services-service-wrappers

希望对你有所帮助