Магнолия 6.0 реализация пользовательских действий - PullRequest
0 голосов
/ 15 февраля 2019

Я пытаюсь реализовать пользовательское действие в 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 и отображается в пользовательском интерфейсе.Когда я нажимаю кнопку действия, я получаю эту ошибку:

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:?]

Какой конструктор я должен предоставить, чтобы он работал?

1 Ответ

0 голосов
/ 15 февраля 2019

Я понял это.В конструкторе моей реализации отсутствовала аннотация @Inject.Рабочая версия ниже:

class MyAction implements Action {

    @Inject
    protected MyAction() {
        //noop
    }


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