在玉兰花中使用模型

时间:2016-07-14 12:59:35

标签: java spring-mvc magnolia

假设我有一个如下控制器:

@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 个答案:

答案 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));
    }
}