无法在alfresco freemarker模板中列出数组

时间:2014-10-28 16:23:23

标签: alfresco freemarker

我遇到很大问题让我的网页制作工作。最好的是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>

1 个答案:

答案 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抛出了一个它在日志中没有显示的错误。