如何在cq5中根据路径创建目录?
How to create a directory on the basis of path in cq5?
我有一个字符串,它是页面的路径,例如 /content/xperia/public/events/eventeditor
。我正在生成此页面的 XML 并将其保存到 DAM,但我想将其保存在 /content
下的类似树结构中。
我试过下面的代码
String page = "/content/xperia/public/events/eventeditor";
page = page.replace("/content", "/content/dam");
if (adminSession.nodeExists(page+ "/"+ "jcr:content")) {
Node node = adminSession.getNode(page+ "/"+ "jcr:content");
node.setProperty("jcr:data", sb.toString());
} else {
Node feedNode = JcrUtil.createPath(page,"nt:file", adminSession);
Node dataNode = JcrUtil.createPath(feedNode.getPath() + "/"+ "jcr:content", "nt:resource", adminSession);
dataNode.setProperty("jcr:data",sb.toString());
}
但是报如下错误
No matching child node definition found for
{http://www.jcp.org/jcr/1.0}content
因为版本库中没有这个路径。有没有一种方法可以让我即时创建目录。因为要保存此文件,我需要在 /content/dam
下创建整个树 xperia/public/events
,然后将 eventeditor.xml
保存在该目录中。
求推荐。
您的代码存在一些问题。 JcrUtil.createPath(String absolutePath, String nodeType, Session session)
使用给定的 NodeType 创建所有不存在的中间路径。
这意味着所有节点 xperia、public 和事件都是使用类型 nt:file
而不是 sling:OrderedFolder
创建的。
您可以改用 createPath(String absolutePath, boolean createUniqueLeaf, String intermediateNodeType, String nodeType, Session session, boolean autoSave)
方法来指定要创建的中间节点的类型。
String page = "/content/xperia/public/events/eventeditor";
page = page.replace("/content", "/content/dam");
page += ".xml";
if (adminSession.nodeExists(page+ "/"+ "jcr:content")) {
Node node = adminSession.getNode(page+ "/"+ "jcr:content");
node.setProperty("jcr:data", sb.toString());
} else {
Node feedNode = JcrUtil.createPath(page, true, "sling:OrderedFolder", "nt:file", adminSession, false);
Node dataNode = feedNode.addNode("jcr:content", "nt:resource");
dataNode.setProperty("jcr:data",sb.toString());
}
adminSession.save();
我有一个字符串,它是页面的路径,例如 /content/xperia/public/events/eventeditor
。我正在生成此页面的 XML 并将其保存到 DAM,但我想将其保存在 /content
下的类似树结构中。
我试过下面的代码
String page = "/content/xperia/public/events/eventeditor";
page = page.replace("/content", "/content/dam");
if (adminSession.nodeExists(page+ "/"+ "jcr:content")) {
Node node = adminSession.getNode(page+ "/"+ "jcr:content");
node.setProperty("jcr:data", sb.toString());
} else {
Node feedNode = JcrUtil.createPath(page,"nt:file", adminSession);
Node dataNode = JcrUtil.createPath(feedNode.getPath() + "/"+ "jcr:content", "nt:resource", adminSession);
dataNode.setProperty("jcr:data",sb.toString());
}
但是报如下错误
No matching child node definition found for {http://www.jcp.org/jcr/1.0}content
因为版本库中没有这个路径。有没有一种方法可以让我即时创建目录。因为要保存此文件,我需要在 /content/dam
下创建整个树 xperia/public/events
,然后将 eventeditor.xml
保存在该目录中。
求推荐。
您的代码存在一些问题。 JcrUtil.createPath(String absolutePath, String nodeType, Session session)
使用给定的 NodeType 创建所有不存在的中间路径。
这意味着所有节点 xperia、public 和事件都是使用类型 nt:file
而不是 sling:OrderedFolder
创建的。
您可以改用 createPath(String absolutePath, boolean createUniqueLeaf, String intermediateNodeType, String nodeType, Session session, boolean autoSave)
方法来指定要创建的中间节点的类型。
String page = "/content/xperia/public/events/eventeditor";
page = page.replace("/content", "/content/dam");
page += ".xml";
if (adminSession.nodeExists(page+ "/"+ "jcr:content")) {
Node node = adminSession.getNode(page+ "/"+ "jcr:content");
node.setProperty("jcr:data", sb.toString());
} else {
Node feedNode = JcrUtil.createPath(page, true, "sling:OrderedFolder", "nt:file", adminSession, false);
Node dataNode = feedNode.addNode("jcr:content", "nt:resource");
dataNode.setProperty("jcr:data",sb.toString());
}
adminSession.save();