Magnolia CMS:重命名页面在使用Urltrans模块时创建404

时间:2016-11-02 17:13:43

标签: java content-management-system magnolia

Urltrans module帮助我拥有国际化的网址,但只有一个层次结构。

总的来说,除了那种情况外,它的工作正常:

  1. 返回Magnolia CMS管理中心,在页面应用中打开一个页面
  2. 让我们说我用德语将页面可视化为
  3. 打开“页面属性对话框”
  4. 更改(本地化)名称
  5. 保存
  6. 404 error message在&#34; Page Preview&#34;标签。日志显示2016-11-01 11:17:57,413 WARN info.magnolia.rendering.engine.RenderingFilter : Resource not found: [/<path>/<to>/<page>?mgnlPreview=false&mgnlChannel=desktop]
  7. 这种情况的发生仅仅是因为我现在试图在管理中心看到的页面仍然是&#34;以前的名称&#34;,因此&#34;以前的URL路径&#34;,因此页面不再存在。

    我在line 51 of UrltransSaveHandler.java发现了这个问题(我认为这就是我的意思)。

    我知道如何防止这种情况发生,例如:

    • 只要更改页面名称,只需以编程方式关闭当前Pages app标签即可?
    • 将当前标签重定向到查看包含新网址路径的页面
    • 不允许用户从Page app's browser
    • 以外的任何位置编辑页面名称
    • 另一种解决方案可能吗?

1 个答案:

答案 0 :(得分:1)

解释

实际上没有使用

UrltransSaveHandler.java

但是,SaveDialogAction.java已在对话框的Action Definition中配置。

这是相关的对话框(如果你没有覆盖它):admincentral#app:configuration:browser;/modules/standard-templating-kit/dialogs/generic/master/basePageProperties:treeview:

SaveDialogAction.javasetNodeName(node, item)致电line 81

此方法与UrltransSaveHandler.java line 51处的情况非常相似:它执行&#34; if (node's "name" property has changed?){rename node itself}&#34;。

解决方案:简而言之

  1. 创建一个与Action Definition完全相同的新SaveDialogAction,但此setNodeName(node, item);调用除非父节点不属于NodeType {{1 }}
  2. 将此新mgnl:variant分配给相关对话框配置中的Class操作
  3. 动作定义类

    Commit

    动作类

    package com.myproject.dialog;
    
    import info.magnolia.ui.admincentral.dialog.action.SaveDialogActionDefinition;
    import info.magnolia.ui.api.action.Action;
    
    public class MyProjectUrltransSaveActionDefinition extends SaveDialogActionDefinition {
    
        public MyProjectUrltransSaveActionDefinition() {
            setImplementationClass((Class<? extends Action>) MyProjectUrltransSaveAction.class);
        }
    
    }