【问题标题】:Accessing Magnolia TemplatingFunctions from inside a controller从控制器内部访问 Magnolia TemplatingFunctions
【发布时间】:2016-04-18 15:12:28
【问题描述】:

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

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

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

我看过使用@Inject;但是我在注入所有参数时不断遇到问题。

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

    }
}

【问题讨论】:

  • @ducaz035 对此有何想法?

标签: java magnolia


【解决方案1】:

当我检查该方法的作用时,我发现它是两个功能的组合。

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找到

希望对你有帮助,

【讨论】:

  • 这绝对有帮助。我们这样做的方式是不使用@Autowire 或@Inject 服务,而是使用TemplatingFunctions templatingFunctions = Components.getComponent(TemplatingFunctions.class);
  • 如果你可以使用 Components.getComponent() 获取它,那么注入它应该也没有问题。我怀疑在这种情况下其他字段可能无法注入 :) 但很高兴这有帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多