更改现有的Liferay 7课程

时间:2016-11-20 20:36:28

标签: liferay osgi liferay-7

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

有没有办法使用模块覆盖liferay门户类?在我的情况下,我想更改类PrivateMessagingUtil。

致以最诚挚的问候,

丹尼尔

2 个答案:

答案 0 :(得分:1)

不看代码:如果有一个扩展点:使用它。当您为要更改的类命名时,我假设没有,所以扩展点可能在其他调用此方法的类中。并非每个班级都有一个扩展点。如果其他一切都失败了,你必须咬紧牙关并维护一个分支版本 - 至少它(可能,我还没看过代码)一个插件,所以尺寸和影响会相对有限。

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

...并在此单独回答Daniele的评论问题:我没有看到代码 - 这就是这类问题的问题:我心情不同。我拒绝了这个问题"我想改变Xxx类中的一些代码"在评论中提出反问题:" 通常有更好的解决方案,但是当提出这样的技术问题时,任何答案都可能不是最理想的。因为Breiti选择了他打算用来解决问题的解决方案,所以我坚持自己的观点 - 随意添加一个更好的答案,假设他的实际意图。

答案 1 :(得分:1)

您可以自定义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文档中的链接:

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

我希望它可以帮到你。