2016-07-14 59 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)); 
    } 
}