Создание Java моделей в CMS Magnolia - PullRequest
0 голосов
/ 11 марта 2020

Я установил Magnolia с помощью maven, успешно собрал и развернул проект. Я также могу создавать шаблоны и компоненты yaml.

Я хотел бы создать Java модели для доступа к внешним базам данных и добавить бизнес-логи c, но не могу найти, где создавать классы, а документация не обширна в эта область.

В среде IDE Netbeans нет каталога sr c, отображаемого в дереве проекта. Когда я создал пакет и класс jave, я получаю сообщение об ошибке в tomcat:

Детали проблемы: Не удалось разрешить свойство класса из-за отсутствующего класса: [newpackage.NewClass]

Где следует Я создаю классы?

Обновление:

Я создал классы в отдельном проекте Java и поместил банку в web-inf / lib. Теперь я не получаю ошибку отсутствующего класса, но получаю ошибку приведения при рендеринге

Класс:

package com.example;
public class NewClass  {

    public String getText() {
       return "Hello Magnolia!";
    }

}

YAML:

modelClass: com.example.NewClass

Шаблон:

<h1>${model.getText()}</h1>

Ошибка:

RenderException: java .lang.ClassCastException: com.example.NewClass не может быть приведен к info.magnolia.rendering.model.RenderingModel

Обновление 2:

Я изменил класс, чтобы расширить Magnolia RenderingModelImpl до этого:

package com.example;

import info.magnolia.module.templating.RenderingModel;
import info.magnolia.module.templating.RenderingModelImpl;
import info.magnolia.rendering.template.configured.ConfiguredTemplateDefinition;
import javax.jcr.Node;
import javax.jcr.PathNotFoundException;
import javax.jcr.RepositoryException;

public class NewClass extends RenderingModelImpl {

    public NewClass(Node content, ConfiguredTemplateDefinition definition, RenderingModel<?> parent) throws PathNotFoundException, RepositoryException {
        super(content, definition, parent);
    }

    public static String getText() {
        return "Hello World!";
    }

}

Теперь он не компилируется и отображает и выводит ошибку для оператора super в конструкторе:

incompatible types: Node cannot be converted to Content

Ответы [ 2 ]

0 голосов
/ 17 марта 2020

Я нашел рабочий пример на этой ссылке на github и изменил его оттуда. Следующая модель Java работала правильно и вернула строку, которую я могу отрендерить:

package com.example;

import info.magnolia.rendering.model.RenderingModel;
import info.magnolia.rendering.model.RenderingModelImpl;
import info.magnolia.rendering.template.RenderableDefinition;


import javax.inject.Inject;
import javax.jcr.Node;



public class NewClass<RD extends RenderableDefinition> extends RenderingModelImpl {

    @Inject
    public NewClass(Node content, RD definition, RenderingModel<?> parent) {
        super(content, definition, parent);

    }

    @Override
    public String execute() {
        return super.execute();
    }

    public String getName() {
    return "Hello Magnolia!";
    }
}
0 голосов
/ 11 марта 2020

Пожалуйста, посмотрите на следующую страницу документации: https://documentation.magnolia-cms.com/display/DOCS61/How+to+use+Magnolia+Maven+archetypes

Там вы найдете информацию об архетипах Maven и есть раздел о том, как создать пользовательский java модуль. После создания вы также должны добавить его в свое веб-приложение.

После редактирования: выясняется, что вы пытаетесь внедрить класс модели, который необходимо расширить для RenderingModelImpl в том конкретном классе модели, который вы пытаетесь назначить.

Ура,

...