【问题标题】:Magnolia 6.0 custom action implementationMagnolia 6.0 自定义操作实现
【发布时间】:2019-07-09 07:19:06
【问题描述】:

我尝试在actionbar 中实现自定义操作。我的实现是

package com.example;

import info.magnolia.ui.api.action.Action;
import info.magnolia.ui.api.action.ActionExecutionException;
import info.magnolia.ui.contentapp.detail.action.AbstractItemActionDefinition;

public class MyActionDefinition extends AbstractItemActionDefinition {

    public MyActionDefinition() {
        this.setImplementationClass(MyAction.class);
    }
}

class MyAction implements Action {

    @Override
    public void execute() throws ActionExecutionException {
        System.out.println("Yo!");
    }
}

动作通过 yaml 文件注册并显示在 UI 中。当我单击操作按钮时,我收到此错误:

Caused by: info.magnolia.objectfactory.MgnlInstantiationException: No suitable constructor found for class [class com.example.MyAction]
    at info.magnolia.objectfactory.ObjectManufacturer.newInstance(ObjectManufacturer.java:124) ~[magnolia-core-6.0.jar:?]
    at info.magnolia.objectfactory.guice.GuiceComponentProvider.newInstanceWithParameterResolvers(GuiceComponentProvider.java:132) ~[magnolia-core-6.0.jar:?]
    at info.magnolia.ui.framework.ioc.UiContextBoundComponentProvider.lambda$newInstanceWithParameterResolvers$4(UiContextBoundComponentProvider.java:113) ~[magnolia-ui-framework-6.0.jar:?]
    at info.magnolia.ui.framework.ioc.UiContextBoundComponentProvider.provideInCurrentScope(UiContextBoundComponentProvider.java:125) ~[magnolia-ui-framework-6.0.jar:?]
    at info.magnolia.ui.framework.ioc.UiContextBoundComponentProvider.newInstanceWithParameterResolvers(UiContextBoundComponentProvider.java:113) ~[magnolia-ui-framework-6.0.jar:?]
    at info.magnolia.ui.framework.ioc.UiContextBoundComponentProvider.newInstance(UiContextBoundComponentProvider.java:108) ~[magnolia-ui-framework-6.0.jar:?]
    at info.magnolia.ui.api.action.AbstractActionExecutor.createAction(AbstractActionExecutor.java:90) ~[magnolia-ui-api-6.0.jar:?]

我应该提供什么样的构造函数才能让它工作?

【问题讨论】:

    标签: java content-management-system magnolia


    【解决方案1】:

    我想通了。我的实现的构造函数缺少@Inject 注释。以下工作版本:

    class MyAction implements Action {
    
        @Inject
        protected MyAction() {
            //noop
        }
    
    
        @Override
        public void execute() throws ActionExecutionException {
            System.out.println("Yo!");
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-07
      • 2021-02-05
      • 1970-01-01
      相关资源
      最近更新 更多