在Magnolia CMS中创建Java模型

时间:2020-03-11 13:08:12

标签: magnolia

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

我想创建Java模型来访问外部数据库并添加业务逻辑,但是找不到在哪里创建类,并且该文档在该领域并不广泛。

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

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

我应该在哪里创建类?

更新:

我在一个单独的Java项目中创建了这些类,并将一个jar放在了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:

我修改了该类以将木兰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 :(得分:0)

请查看以下文档页面: https://documentation.magnolia-cms.com/display/DOCS61/How+to+use+Magnolia+Maven+archetypes

在这里您将找到有关Maven原型的信息,并有一节介绍如何创建自定义Java模块。创建后,您还必须将其添加到您的Web应用中。

版本后: 事实证明,您尝试注入需要扩展的模型类 您尝试分配的那个特定模型类中的RenderingModelImpl。

干杯

答案 1 :(得分:0)

我在github上的this link找到了一个有效的示例,并从那里对其进行了修改。以下Java模型可以正常工作,并返回了我可以渲染的字符串:

// Main Class
public class Main(){
  public static void main(String[] args){
     try {
         new LoginPage().setVisible(true);
     } catch (Exception e){e.printStackTrace()}
  }
}

// LoginPage Class {
public class LoginPage extends javax.swing.JFrame {
   private javax.swing.JPanel LoginPanel;
   public LoginPage(){
     super("Login Form");
     LoginPanel.setVisible(false); // ERROR - Throws NullPointerException
     setSize(1280, 720);
     setLocationRelativeTo(null);
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     initComponents();
   }
  }
}