在Magnolia CMS中创建Java模型

在Magnolia CMS中创建Java模型,magnolia,Magnolia,我使用maven安装了Magnolia,并成功地构建和部署了该项目。我还可以创建yaml模板和组件 我想创建Java模型来访问外部数据库和添加业务逻辑,但找不到创建类的位置,而且文档在这方面也不广泛 在Netbeans IDE中,项目树中没有出现src目录。当我创建一个包和一个jave类时,tomcat中出现了一个错误: 问题详细信息:由于缺少类[newpackage.NewClass],无法解析类属性 我应该在哪里创建类 更新: 我在一个单独的Java项目中创建了这些类,并在web inf/l

我使用maven安装了Magnolia,并成功地构建和部署了该项目。我还可以创建yaml模板和组件

我想创建Java模型来访问外部数据库和添加业务逻辑,但找不到创建类的位置,而且文档在这方面也不广泛

在Netbeans IDE中,项目树中没有出现src目录。当我创建一个包和一个jave类时,tomcat中出现了一个错误:

问题详细信息:由于缺少类[newpackage.NewClass],无法解析类属性

我应该在哪里创建类

更新: 我在一个单独的Java项目中创建了这些类,并在web inf/lib中放置了一个jar。 现在,我没有得到丢失的类错误,而是得到了一个渲染强制转换错误

类别:

package com.example;
public class NewClass  {

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

}
亚马尔:

模板:

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

请查看以下文档页面:

在这里您可以找到关于Maven原型的信息,还有一节介绍如何创建自定义java模块。创建后,您还必须将其添加到您的webapp中

编辑后: 事实证明,您试图注入一个需要扩展的模型类 在您尝试分配的特定模型类中呈现ModelImpl


干杯,

我在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!";
    }
}
package.com.example;
导入info.magnolia.rendering.model.RenderingModel;
导入info.magnolia.rendering.model.RenderingModelImpl;
导入info.magnolia.rendering.template.RenderableDefinition;
导入javax.inject.inject;
导入javax.jcr.Node;
公共类NewClass扩展了RenderingModelImpl{
@注入
公共NewClass(节点内容、RD定义、渲染模型父级){
超级(内容、定义、父级);
}
@凌驾
公共字符串execute(){
返回super.execute();
}
公共字符串getName(){
返回“你好,木兰花!”;
}
}

我尝试将模块制作成一个普通的jar,也是maven原型magnolia模块制作的jar,但我仍然无法在模板中包含自定义类,我得到以下错误,文档站点上没有示例:RenderException:java.lang.ClassCastException:package.className无法转换为info.magnolia.rendering.model.RenderingModel您可以共享该类吗?我编辑了原始问题并添加了该类。您必须在运行时将RenderingModelImpl类扩展到该类它知道它是modelClassI extended 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!";
    }

}
incompatible types: Node cannot be converted to Content
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!";
    }
}