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