在 Magnolia CMS 中注册自定义 VirtualUriMapper
Posted
技术标签:
【中文标题】在 Magnolia CMS 中注册自定义 VirtualUriMapper【英文标题】:Registering a custom VirtualUriMapper in Magnolia CMS 【发布时间】:2021-05-27 00:35:09 【问题描述】:我尝试为 Magnolia CMS 版本 6.1.3 实现自定义 VirtualUriMapping(RegexpVirtualUriMapping,但带有本地化)。 不幸的是,我不能在轻模块(yaml 定义)中使用我的类。我的类 (I18nVirtualUriMapping.java) 放置在一个模块中,该模块是我的自定义 web 应用程序 (magnolia-community-webapp 原型) 的依赖项。如何注册我的 VirtualUriMapper?
这是自定义类 I18nVirtualUriMapping.java(缩写):
package my.magnolia.module.mapping;
import info.magnolia.virtualuri.mapping.DefaultVirtualUriMapping;
public class I18nVirtualUriMapping extends DefaultVirtualUriMapping
轻模块news-ROOT.yaml中的virtual-uri映射定义:
class: my.magnolia.module.mapping.I18nVirtualUriMapping
fromUri: /news(.*).html
toUri: forward:/News-Detail.html?news=$1
在轻模块中定义映射,我得到这个错误:
2021-05-27 02:10:20,556 WARN agnolia.transformer.ClassPropertyBasedTypeResolver: Encountered the 'class' property but failed to resolved the type from its value: [my.magnolia.module.mapping.I18nVirtualUriMapping]
java.lang.ClassNotFoundException: my.magnolia.module.mapping.I18nVirtualUriMapping
at java.net.URLClassLoader.findClass(Unknown Source) ~[?:1.8.0_131]
at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:1.8.0_131]
...
【问题讨论】:
【参考方案1】:经过长时间的搜索,我自己找到了解决方案。这是关于依赖注入 (https://docs.magnolia-cms.com/product-docs/Modules/Dependency-injection-and-inversion-of-control.html)。
public class I18nVirtualUriMapping extends DefaultVirtualUriMapping
private static final Logger log = LoggerFactory.getLogger(I18nVirtualUriMapping.class);
private final I18nVirtualMappingModule module;
@Inject
public I18nVirtualUriMapping(final I18nVirtualMappingModule module)
this.module = module;
//...
【讨论】:
以上是关于在 Magnolia CMS 中注册自定义 VirtualUriMapper的主要内容,如果未能解决你的问题,请参考以下文章
使用 Blossom 在 Magnolia CMS 对话框中创建自定义字段