在 Magnolia 中使用模型
Posted
技术标签:
【中文标题】在 Magnolia 中使用模型【英文标题】:Using models in magnolia 【发布时间】:2016-07-14 12:59:35 【问题描述】:假设我有如下控制器:
@Controller
@Template(id= HomePageTemplate.ID, title = "Home Page")
public class HomePageTemplate
public static final String ID = "project:pages/home-page";
@RequestMapping("/home-page")
public String render(Model model, Node node)
model.addAttribute("meta", new MetaModel(node));
我希望能够将 MetaModel 与 TemplatingFunctions
和其他 Magnolia 项目结合使用 - 但我不确定如何从该模型内部访问内容映射:
public class AbstractModel
protected Node node;
protected TemplatingFunctions tf;
public AbstractModel(Node node, @Inject TemplatingFunctions tf)
this.node = node;
this.tf = tf;
public function getTitle()
return tf.get("metaTitle");
对如何注入模板函数有什么想法吗?
【问题讨论】:
【参考方案1】:不要使用new MetaModel(node)
,而是使用
info.magnolia.objectfactory.Components.newInstance(MetaModel.class, node)
为了创建模型的新实例。 TemplatingFunctions
将被自动注入。
另一种选择是将 TemplatingFunctions
公开为 Spring bean,在 @Configuration
类中的某处:
@Bean
public TemplatingFunctions templatingFunctions()
return Components.getComponent(TemplatingFunctions.class);
只需在您的 Spring 控制器中自动装配 bean 并将新的构造函数添加到 MetaModel
类:
@Controller
@Template(id= HomePageTemplate.ID, title = "Home Page")
public class HomePageTemplate
@Autowired
private TemplatingFunctions cmsfn;
public String render(Model model, Node node)
model.addAttribute("meta", new MetaModel(node, cmsfn));
【讨论】:
以上是关于在 Magnolia 中使用模型的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Magnolia 应用程序中使用 FreeMarker 模板?
在 Magnolia 中使用 MultiValueFieldDefinition 时限制子项的数量
版本控制文件错误,在 java 中使用 Magnolia 与 apache 化学和标准 CMIS