在 Magnolia CMS 中创建 Java 模型
Posted
技术标签:
【中文标题】在 Magnolia CMS 中创建 Java 模型【英文标题】:Creating Java models in Magnolia CMS 【发布时间】:2020-03-11 13:08:12 【问题描述】:我使用 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!";
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
【问题讨论】:
【参考方案1】:请查看以下文档页面: https://documentation.magnolia-cms.com/display/DOCS61/How+to+use+Magnolia+Maven+archetypes
在那里你会找到关于 Maven 原型的信息,还有一个关于如何创建自定义 java 模块的部分。创建后,您还必须将其添加到您的网络应用中。
改版后: 原来你试图注入一个你需要扩展的模型类 RenderingModelImpl 在您尝试分配的特定模型类中。
干杯,
【讨论】:
我尝试将模块制作为常规 jar 以及由 maven archetype magnolia-module 生成的 jar,但我仍然无法在模板中包含自定义类,出现以下错误并且有文档站点上没有示例:RenderException: java.lang.ClassCastException: package.className cannot be cast to info.magnolia.rendering.model.RenderingModel 可以分享一下课程吗? 我编辑了原始问题并添加了课程。 你必须在运行时将 RenderingModelImpl 类扩展为它知道它是 modelClass 的一个实例 我扩展了 RenderingModelImpl,现在在构造函数上收到错误。我用我的代码更新了原始问题。【参考方案2】:我在 github 上的 this link 找到了一个工作示例,并从那里对其进行了修改。以下 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!";
【讨论】:
以上是关于在 Magnolia CMS 中创建 Java 模型的主要内容,如果未能解决你的问题,请参考以下文章