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