我使用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
我修改了该类以将木兰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
答案 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();
}
}
}