2016-04-18 205 views
1

根據用戶是否處於編輯模式,是否可以提供不同的體驗?我注意到下面的方法存在;但它不是靜態的:從控制器內部訪問Magnolia TemplatingFunctions

info.magnolia.templating.functions.TemplatingFunctions.isEditMode() 

是否有方法從控制器內部訪問isEditMode()方法?它是否定義了一個可以訪問的地方?我想像創建一個TemplatingFunctions類的新實例將不會幫助...

我看過使用@Inject;但是我不斷收到關於注入所有參數的問題。

@Inject 
public ModelAndView renderView(Model model, Node node, TemplatingFunctions templatingFunctions) throws RepositoryException { 
    if (templatingFunctions.isEditMode()) { 

    } 
} 
+0

@ ducaz035這一塊有什麼想法可以找到? – bashaus

回答

2

當我檢查了那個方法的作用後,我發現它是兩個函數的組合。

Components.getComponent(ServerConfiguration.class).isAdmin() 

aggregationStateProvider.get().isPreviewMode() 

看來,你應該注入提供者知道,如果用戶在預覽模式下

Provider<AggregationState> aggregationStateProvider 

作爲一項一般性評論,人們可以明白,如果一個組件可從myModule/src/main/resources/META-INF/mymodule.xml下的相關模塊配置注射或不注射。如果某個組件在那裏列出,那麼它是否可以在其他類中注入。例如,注射一種TemplatinFunctions應該沒有問題,因爲它確實定義爲;

<component> 
    <type>info.magnolia.templating.functions.TemplatingFunctions</type> 
    <implementation>info.magnolia.templating.functions.TemplatingFunctions</implementation> 
    <scope>singleton</scope> 
</component> 

進一步閱讀可以在https://documentation.magnolia-cms.com/display/DOCS/Dependency+injection+and+inversion+of+control

希望這有助於

+0

這絕對有幫助。我們這樣做的方式是不使用@Autowire或@Inject服務,而是使用'TemplatingFunctions templatingFunctions = Components.getComponent(TemplatingFunctions.class);' – bashaus

+0

如果你可以通過Components.getComponent()獲得它,那麼注入它應該也沒有問題。我懷疑其他領域可能不會注射在這種情況下:)但很高興這有助於 – Ducaz035