自定义操作实施 Magnolia CMS
Custom action implementation Magnolia CMS
我尝试在操作栏中为 Magnolia 中的页面应用程序实施自定义操作,类似于 。
我的实现是:
package ch.zzz.module.versioning;
import info.magnolia.ui.api.action.Action;
import info.magnolia.ui.api.action.ActionExecutionException;
import info.magnolia.ui.api.action.ConfiguredActionDefinition;
public class ZzzVersioning extends ConfiguredActionDefinition {
public ZzzVersioning() {
this.setImplementationClass(MyAction.class);
}
}
class MyAction implements Action {
@Override
public void execute() throws ActionExecutionException {
System.out.println("Hello! Executed MyAction");
}
}
页面应用程序的操作配置正在使用 class ch.zzz.module.versioning.ZzzVersioning,我在页面应用程序的操作栏中的项目下列出了操作。
配置应用
模块>页面>应用程序>页面>子应用程序>浏览器>操作>我的操作
-class=ch.zzz.module.versioning.ZzzVersioning
模块>页面>应用程序>页面>子应用程序>浏览器>操作栏>部分>页面操作>导入导出操作>项目-MyAction
单击操作栏中的 MyAction 时收到错误消息:Could not instantiate action class for action: MyAction.
这是我在日志中得到的:
2019-11-22 08:37:26,498 ERROR fo.magnolia.ui.contentapp.browser.BrowserPresenter: An error occurred while executing action [MyAction]
info.magnolia.ui.api.action.ActionExecutionException: Could not instantiate action class for action: MyAction
...然后在堆栈的末尾:
Caused by: info.magnolia.objectfactory.MgnlInstantiationException: No suitable constructor found for class [class ch.zzz.module.versioning.MyAction]
at info.magnolia.objectfactory.ObjectManufacturer.newInstance(ObjectManufacturer.java:124) ~[magnolia-core-5.6.10.jar:?]
at info.magnolia.objectfactory.guice.GuiceComponentProvider.newInstanceWithParameterResolvers(GuiceComponentProvider.java:132) ~[magnolia-core-5.6.10.jar:?]
at info.magnolia.ui.framework.ioc.UiContextBoundComponentProvider.lambda$newInstanceWithParameterResolvers(UiContextBoundComponentProvider.java:113) ~[magnolia-ui-framework-5.6.10.jar:?]
at info.magnolia.ui.framework.ioc.UiContextBoundComponentProvider.provideInCurrentScope(UiContextBoundComponentProvider.java:125) ~[magnolia-ui-framework-5.6.10.jar:?]
at info.magnolia.ui.framework.ioc.UiContextBoundComponentProvider.newInstanceWithParameterResolvers(UiContextBoundComponentProvider.java:113) ~[magnolia-ui-framework-5.6.10.jar:?]
at info.magnolia.ui.framework.ioc.UiContextBoundComponentProvider.newInstance(UiContextBoundComponentProvider.java:108) ~[magnolia-ui-framework-5.6.10.jar:?]
at info.magnolia.ui.api.action.AbstractActionExecutor.createAction(AbstractActionExecutor.java:90) ~[magnolia-ui-api-5.6.10.jar:?]
... 129 more
有什么关于如何让它工作的建议吗?
解决方案
感谢 ©Ducay035 我能够找到自定义版本控制的解决方案 class:
package ch.zzz.module.versioning;
import info.magnolia.ui.api.action.CommandActionDefinition;
/**
* Definition interface for the MyAction page action.
*/
public class UzhVersioning extends CommandActionDefinition {
public UzhVersioning() {
this.setImplementationClass(MyAction.class);
}
}
和 MyAction class:
public class MyAction extends AbstractMultiItemAction<Versioning> {
public MyAction(Versioning definition, JcrItemAdapter item, UiContext uiContext) {
super(definition, item, uiContext);
// TODO Auto-generated constructor stub
}
@Override
public void execute() {
////your action code here
}
你必须有你的 类 public 这样 IOC 系统才能找到它。但是,如果您使用注入机制,可以将构造函数设为私有。
干杯,
希望对您有所帮助
我尝试在操作栏中为 Magnolia 中的页面应用程序实施自定义操作,类似于
我的实现是:
package ch.zzz.module.versioning;
import info.magnolia.ui.api.action.Action;
import info.magnolia.ui.api.action.ActionExecutionException;
import info.magnolia.ui.api.action.ConfiguredActionDefinition;
public class ZzzVersioning extends ConfiguredActionDefinition {
public ZzzVersioning() {
this.setImplementationClass(MyAction.class);
}
}
class MyAction implements Action {
@Override
public void execute() throws ActionExecutionException {
System.out.println("Hello! Executed MyAction");
}
}
页面应用程序的操作配置正在使用 class ch.zzz.module.versioning.ZzzVersioning,我在页面应用程序的操作栏中的项目下列出了操作。
配置应用 模块>页面>应用程序>页面>子应用程序>浏览器>操作>我的操作 -class=ch.zzz.module.versioning.ZzzVersioning
模块>页面>应用程序>页面>子应用程序>浏览器>操作栏>部分>页面操作>导入导出操作>项目-MyAction
单击操作栏中的 MyAction 时收到错误消息:Could not instantiate action class for action: MyAction.
这是我在日志中得到的:
2019-11-22 08:37:26,498 ERROR fo.magnolia.ui.contentapp.browser.BrowserPresenter: An error occurred while executing action [MyAction]
info.magnolia.ui.api.action.ActionExecutionException: Could not instantiate action class for action: MyAction
...然后在堆栈的末尾:
Caused by: info.magnolia.objectfactory.MgnlInstantiationException: No suitable constructor found for class [class ch.zzz.module.versioning.MyAction]
at info.magnolia.objectfactory.ObjectManufacturer.newInstance(ObjectManufacturer.java:124) ~[magnolia-core-5.6.10.jar:?]
at info.magnolia.objectfactory.guice.GuiceComponentProvider.newInstanceWithParameterResolvers(GuiceComponentProvider.java:132) ~[magnolia-core-5.6.10.jar:?]
at info.magnolia.ui.framework.ioc.UiContextBoundComponentProvider.lambda$newInstanceWithParameterResolvers(UiContextBoundComponentProvider.java:113) ~[magnolia-ui-framework-5.6.10.jar:?]
at info.magnolia.ui.framework.ioc.UiContextBoundComponentProvider.provideInCurrentScope(UiContextBoundComponentProvider.java:125) ~[magnolia-ui-framework-5.6.10.jar:?]
at info.magnolia.ui.framework.ioc.UiContextBoundComponentProvider.newInstanceWithParameterResolvers(UiContextBoundComponentProvider.java:113) ~[magnolia-ui-framework-5.6.10.jar:?]
at info.magnolia.ui.framework.ioc.UiContextBoundComponentProvider.newInstance(UiContextBoundComponentProvider.java:108) ~[magnolia-ui-framework-5.6.10.jar:?]
at info.magnolia.ui.api.action.AbstractActionExecutor.createAction(AbstractActionExecutor.java:90) ~[magnolia-ui-api-5.6.10.jar:?]
... 129 more
有什么关于如何让它工作的建议吗?
解决方案 感谢 ©Ducay035 我能够找到自定义版本控制的解决方案 class:
package ch.zzz.module.versioning;
import info.magnolia.ui.api.action.CommandActionDefinition;
/**
* Definition interface for the MyAction page action.
*/
public class UzhVersioning extends CommandActionDefinition {
public UzhVersioning() {
this.setImplementationClass(MyAction.class);
}
}
和 MyAction class:
public class MyAction extends AbstractMultiItemAction<Versioning> {
public MyAction(Versioning definition, JcrItemAdapter item, UiContext uiContext) {
super(definition, item, uiContext);
// TODO Auto-generated constructor stub
}
@Override
public void execute() {
////your action code here
}
你必须有你的 类 public 这样 IOC 系统才能找到它。但是,如果您使用注入机制,可以将构造函数设为私有。
干杯,
希望对您有所帮助