2016-07-14 60 views
1

假设我有一个控制器,如下列:在玉兰使用模型

@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)); 
    } 
} 

而且我希望能够用结合元模型与TemplatingFunctions等白玉兰项目 - 但我不知道该如何从此模型中访问内容映射:

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的控制器,并添加一个新的构造函数来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)); 
    } 
}