- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
Urltrans module帮助我拥有国际化的 URL,但只有一个层次结构。
<小时/>总的来说,它工作得很好,除了这种情况:
404 error message
在“页面预览”选项卡中。日志显示2016-11-01 11:17:57,413 WARN info.magnolia.rendering.engine.RenderingFilter : Resource not found: [/<path>/<to>/<page>?mgnlPreview=false&mgnlChannel=desktop]
发生这种情况的原因很简单,因为我现在尝试在管理中心查看的页面仍然是“以前的名称”,因此是“以前的 url 路径”,因此页面不再存在。
我发现 line 51 of UrltransSaveHandler.java 中提到了这个问题(我想这就是我的意思)。
例如,我知道如何防止这种情况发生:
Pages app
页面名称更改时的选项卡?Page app's browser
以外的任何地方编辑页面名称。 最佳答案
UrltransSaveHandler.java
实际上没有使用。
但是,SaveDialogAction.java
在对话框的操作定义
中配置。
这是相关的对话框(如果您没有覆盖它):admincentral#app:configuration:browser;/modules/standard-templatating-kit/dialogs/generic/master/basePageProperties:treeview:
.
SaveDialogAction.java
在第 81 行
调用setNodeName(node, item)
。
此方法与UrltransSaveHandler.java
的第51行
非常相似。 :它执行“if(节点的“name”属性已更改?){重命名节点本身}
”。
Action Definition
,其功能与 SaveDialogAction
完全相同,除了对 setNodeName(node, item);
的调用仅如果父节点不是 NodeType
mgnl:variant
类
分配给相关对话框配置中的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);
}
}
package com.myproject.dialog;
import javax.jcr.Node;
import javax.jcr.nodetype.NodeType;
import javax.jcr.Property;
import javax.jcr.RepositoryException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.vaadin.data.Item;
import info.magnolia.cms.core.Path;
import info.magnolia.jcr.util.NodeUtil;
import info.magnolia.ui.admincentral.dialog.action.SaveDialogAction;
import info.magnolia.ui.api.action.ActionExecutionException;
import info.magnolia.ui.form.EditorCallback;
import info.magnolia.ui.form.EditorValidator;
import info.magnolia.ui.vaadin.integration.jcr.JcrNodeAdapter;
import info.magnolia.ui.vaadin.integration.jcr.ModelConstants;
public class MyProjectUrltransSaveAction<T extends MyProjectUrltransSaveActionDefinition> extends SaveDialogAction {
private static final Logger log = LoggerFactory.getLogger(MyProjectUrltransSaveAction.class);
public MyProjectUrltransSaveAction(T definition, Item item, EditorValidator validator, EditorCallback callback) {
super(definition, item, validator, callback);
}
public void execute() throws ActionExecutionException {
if (validateForm()) {
final JcrNodeAdapter item = (JcrNodeAdapter) this.item;
try {
final Node node = item.applyChanges();
final Node parentNode = node.getParent();
final String parentNodeType = parentNode.getPrimaryNodeType().getName();
if(!parentNodeType.equals("mgnl:variant")){
setNodeName(node, item);
}
node.getSession().save();
} catch (final RepositoryException e) {
throw new ActionExecutionException(e);
}
callback.onSuccess(getDefinition().getName());
}
}
/**
* Set the node Name.
* Node name is set to: <br>
* the value of the property 'name' if it is present.
*/
protected void setNodeName(Node node, JcrNodeAdapter item) throws RepositoryException {
String propertyName = "name";
if (node.hasProperty(propertyName) && !node.hasProperty(ModelConstants.JCR_NAME)) {
Property property = node.getProperty(propertyName);
String newNodeName = property.getString();
if (!node.getName().equals(Path.getValidatedLabel(newNodeName))) {
newNodeName = Path.getUniqueLabel(node.getSession(), node.getParent().getPath(), Path.getValidatedLabel(newNodeName));
item.setNodeName(newNodeName);
NodeUtil.renameNode(node, newNodeName);
}
}
}
}
关于java - 木兰CMS : renaming page creates 404 when using Urltrans module,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40385871/
Urltrans module帮助我拥有国际化的 URL,但只有一个层次结构。 总的来说,它工作得很好,除了这种情况: 返回 Magnolia CMS 管理中心,在页面应用中打开页面 假设我正在可视化
我是一名优秀的程序员,十分优秀!