我想覆盖扩展ExportArticleMVCResourceCommand
类的类BaseMVCResourceCommand
中的受保护方法。
我想将期刊文章转换为liferay 7中的pdf。我已经在自己的方法中编写了这个功能,并希望在doServeResource(...)
方法中调用该方法。但由于doServeResource()
受到保护,我无法在按钮提交时调用它。因此,我想问一下如何在liferay 7中覆盖这个doServeResource()
方法。
答案 0 :(得分:0)
Liferay 7是一个开源Java平台,因此解决问题(没有任何文档)的最佳方法是首先在代码中。您会注意到ExportArticleMVCResourceCommand
类扩展了BaseMVCResourceCommand
。在ExportArticleMVCResourceCommand
类中,您可以看到doServeResource
方法会覆盖它的父级doServeResource
方法。在BaseMVCResourceCommand
中有几点需要注意。
abstract class
protected abstract void doServeResource
方法,没有实施。serveResource
方法只需调用doServeResource
因此,您希望覆盖doServeResource
类中的ExportArticleMVCResourceCommand
方法,因为当“目标扩展名”属于PDF类型(据称)时,该方法不起作用。您不能通过扩展或实现任何* MVCResourceCommand类或接口来覆盖doServeResource
,因为它受到保护(并且您的OSGi组件覆盖是单独捆绑的),或者在MVCResourceCommand
接口的情况下它不存在。
请记住,doServeResource
方法只需serveResource
中的ExportArticleMVCResourceCommand
方法调用,serveResource
方法在MVCResourceCommand
界面和BaseMVCResourceCommand
{1}}课程。因此,要覆盖doServeResource方法,您只需要使用适当的注释创建自己的OSGi组件,让它覆盖serveResource方法,而不是在您自己的末尾使用referened 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;
}