【问题标题】:How to override protected methods of a class of MVCResourceCommand in liferay?如何在liferay中覆盖MVCResourceCommand类的受保护方法?
【发布时间】:2017-02-01 10:04:29
【问题描述】:

我想覆盖 ExportArticleMVCResourceCommand 类中的受保护方法,该方法扩展了BaseMVCResourceCommand 类。

我想在 liferay 7 中将期刊文章转换为 pdf。我已经在它自己的方法中编写了这个功能,并希望在doServeResource(...) 方法中调用该方法。但由于doServeResource() 受到保护,我无法在按钮提交时调用它。所以想问一下liferay 7中如何覆盖这个doServeResource()方法。

【问题讨论】:

  • 它必须受到保护是有原因的,您是否尝试使用该方法或任何其他方法寻找任何其他方法来实现相同的目标?

标签: liferay liferay-7


【解决方案1】:

剖析问题

Liferay 7 是一个开源 Java 平台,因此排除故障(没有任何文档)的最佳方法是首先查看代码。您会注意到ExportArticleMVCResourceCommand 类扩展了BaseMVCResourceCommand。在ExportArticleMVCResourceCommand 类中,您可以看到doServeResource 方法覆盖了它的父级doServeResource 方法。在BaseMVCResourceCommand 中有几件事需要注意。

  1. abstract class
  2. protected abstract void doServeResource 方法没有实现。
  3. serveResource 方法只调用doServeResource

拼凑起来

因此,您希望覆盖ExportArticleMVCResourceCommandclass 中的doServeResource 方法,因为当“目标扩展”是PDF 类型时该方法不起作用(据称)。您不能通过扩展或实现任何 *MVCResourceCommand 类或接口来覆盖 doServeResource,因为它要么受保护(并且您的 OSGi 组件覆盖是单独捆绑的),要么在 MVCResourceCommand 接口的情况下它不存在。

解决方案

记住doServeResource 方法只是由ExportArticleMVCResourceCommand 中的serveResource 方法调用,serveResource 方法在MVCResourceCommand 接口和BaseMVCResourceCommand 类中都是公共的。因此,要覆盖 doServeResource 方法,您只需要使用适当的注释创建自己的 OSGi 组件,让它覆盖 serveResource 方法,并且不要在自己的末尾引用 serveResource 方法。

@Component(
    property = {
        "javax.portlet.name=" + JournalPortletKeys.JOURNAL,
        "mvc.command.name=exportArticle"
    },
    service = MVCResourceCommand.class
public class CustomExportArticleMVCResourceCommand implements MVCResourceCommand {

    @Override
    public boolean serveResource
        (ResourceRequest resourceRequest, ResourceResponse resourceResponse) {

        // Call your custom method here
       // ExportArticleUtil.sendFile("pdf", resourceRequest, resourceResponse);
    }

    @Reference(target = "(component.name=com.liferay.journal.web.internal.portlet.action.ExportArticleMVCResourceCommand)")
    protected MVCResourceCommand mvcResourceCommand;

}

【讨论】:

    猜你喜欢
    • 2015-10-01
    • 2013-07-01
    • 2022-07-08
    • 1970-01-01
    • 2011-08-04
    • 1970-01-01
    • 1970-01-01
    • 2012-01-26
    • 1970-01-01
    相关资源
    最近更新 更多