我遇到很大问题让我的网页制作工作。最好的是Alfresco JavaScript Console一切正常。如果我部署了webscript,那就不行了。
的javascript:
try {
var nodeRefs = args[0].split('&');
var paths = [];
for (var n in nodeRefs) {
var doc = search.findNode(nodeRefs[n]);
var path = doc.displayPath + "/" + doc.name;
var host = headers['Host'];
path = path.replace('/Firmen-Home/Sites', '');
path = path.replace('/Companyhome/Sites', '');
path = path.replace(/\//g, '\\');
paths.push("\\\\" + host + "@7070\\alfresco" + path);
}
model.paths = paths;
model.nodeRefs = nodeRefs;
} catch (e) {
}
freemarker模板:
<#escape x as jsonUtils.encodeJSONString(x)>
<#assign nodeRefs = nodeRefs>
{
<#assign n = 0>
<#list paths as path>
"${nodeRefs[n]}" : "${path}"<#if path_has_next>,</#if>
<#assign n = n + 1>
</#list>
}
</#escape>
JavaScript控制台输出(我使用相同的noderef 3次进行测试):
{
"workspace:\/\/SpacesStore\/5fa74ad3-9b5b-461b-9df5-de407f1f4fe7" : "\\\\localhost:8080@7070\\alfresco\\swsdp\\documentLibrary\\Budget Files\\budget.xls",
"workspace:\/\/SpacesStore\/5fa74ad3-9b5b-461b-9df5-de407f1f4fe7" : "\\\\localhost:8080@7070\\alfresco\\swsdp\\documentLibrary\\Budget Files\\budget.xls",
"workspace:\/\/SpacesStore\/5fa74ad3-9b5b-461b-9df5-de407f1f4fe7" : "\\\\localhost:8080@7070\\alfresco\\swsdp\\documentLibrary\\Budget Files\\budget.xls"
}
在我尝试的所有可能解决方案中,我从已部署的网页脚本中获得了3个不同的错误:
freemarker.core.ParseException - 在convert / uuidsToPaths.get.json.ftl的第1行第19行遇到“{”。期待以下之一:“in”...“&gt;”
freemarker.core.InvalidReferenceException:转换\ uuidsToPaths.get.json.ftl中的第9行第9行错误nodeRefs未定义。它不能分配给nodeRefs
预期的收集或序列。路径评估为freemarker.template.SimpleHash
我在这里忙什么?我尝试了${nodeRefs}
,$nodeRefs
,{nodeRefs}
....但似乎没有任何效果。
此致 迈克尔
编辑:
JavaScript控制器:
function main() {
var nodeRefs = args[0].split("_");
var paths = [ nodeRefs.length ];
var i = 0;
for ( var n in nodeRefs) {
var doc = search.findNode(nodeRefs[n]);
var path = doc.displayPath + "/" + doc.name;
var host = headers["Host"];
paths[i] = "\\" + host + "@7070\alfresco\\" + path;
i++;
}
model.code = "200";
model.paths = paths;
model.nodeRefs = nodeRefs;
}
main();
Freemarker JSON
<#escape x as jsonUtils.encodeJSONString(x)>
{
"status" : {
"code" : ${code} // easier to differ success from error
},
<#assign n = 0>
<#list paths as path>
"${nodeRefs[n]}" : "${path}"<#if path_has_next>,</#if>
<#assign n = n + 1>
</#list>
}
</#escape>
答案 0 :(得分:3)
这不是答案,但您评论中的讨论看起来并不乐观。
首先,删除JavaScript中的try / catch元素,以便在alfresco.log / share.log中实际看到错误。 在你的情况下,我甚至不会添加一个try / catch,变量将为空,这将在Freemarker中引发错误。
<#assign nodeRefs = nodeRefs>
这是为自己分配一个已经可用的变量,这根本没有意义:)。
为了您的信息,所有model.<variable>
都已映射,因此被分配给Freemarker变量。
因此,在您的情况下,控制器中的 model.nodeRefs JavaScript将成为Freemarker中的 nodeRefs 。
第二次删除Freemarker中的<#escape x as jsonUtils.encodeJSONString(x)>
,这样您的匹配错误就不会弄乱内衬(稍后您应该添加它,一旦它正常工作)。
日志文件中的主要错误是:
freemarker.core.InvalidReferenceException:第3行第9列出错 在convert \ uuidsToPaths.get.json.ftl中,nodeRefs未定义。这不可以 被分配给nodeRefs
这意味着model.nodeRefs不存在,因此你的JavaScript抛出了一个它在日志中没有显示的错误。