从控制器内部访问Magnolia TemplatingFunctions

时间:2016-04-18 15:12:28

标签: java magnolia

是否可以根据用户是否处于编辑模式来提供不同的体验?我注意到存在以下方法;但它不是静态的:

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

有没有办法从控制器内部访问isEditMode()方法?它的某个实例是在某个可以访问的地方定义的吗?我想创建一个TemplatingFunctions类的新实例无济于事......

我看过使用@Inject;但是我一直在注意所有参数的注入问题。

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

    }
}

1 个答案:

答案 0 :(得分: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

找到进一步的阅读材料

希望这有帮助,