假设我有一个如下控制器:
@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");
}
}
关于如何使用模板函数进行注入的任何想法?
答案 0 :(得分: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));
}
}