首先,我正在运行V4.2.e社区版。 我有以下webscript / free marker模板(ftl)来检索某个节点的方面,
[
<#list node.aspects as aspect>
${jsonUtils.toJSONString(aspect)}<#if aspect_has_next>, </#if>
</#list>
]
使用以下js部分:
var docid = url.extension;
model.node = search.findNode(docid);
完美无缺。它返回类似于:
[
"http://www.alfresco.org/model/content/1.0}titled"
]
但我想:
[
"cm:titled"
]
在下面的ScriptNode API中,我找到了一个名为“getAspectsShort
”的类似函数:
Alfresco Community 4.2 Documentation - Script Node
显然,java类中有后端函数:
ScriptNode.java
我尝试以下列方式使用它:
[
<#list node.getAspectsShort as aspect>
${jsonUtils.toJSONString(aspect)}<#if aspect_has_next>, </#if>
</#list>
]
并在catalina.out中找到以下消息:
Caused by: org.alfresco.service.cmr.repository.TemplateException: 011933961 Fehler bei der Verarbeitung der Mustervorlage 'Expression node.getAspectsShort is undefined on line 2, column 12 in aspe
ct.get.json.ftl.'. Bitte wenden Sie sich an Ihren Systemadministrator.
at org.alfresco.repo.template.FreeMarkerProcessor.process(FreeMarkerProcessor.java:222)
at org.springframework.extensions.webscripts.AbstractWebScript.renderTemplate(AbstractWebScript.java:896)
at org.springframework.extensions.webscripts.DeclarativeWebScript.renderFormatTemplate(DeclarativeWebScript.java:267)
at org.springframework.extensions.webscripts.DeclarativeWebScript.execute(DeclarativeWebScript.java:147)
... 28 more
Caused by: freemarker.core.InvalidReferenceException: Expression node.getAspectsShort is undefined on line 2, column 12 in aspect.get.json.ftl.
at freemarker.core.TemplateObject.assertNonNull(TemplateObject.java:125)
at freemarker.core.IteratorBlock.accept(IteratorBlock.java:100)
at freemarker.core.Environment.visit(Environment.java:221)
at freemarker.core.MixedContent.accept(MixedContent.java:92)
at freemarker.core.Environment.visit(Environment.java:221)
at freemarker.core.Environment.process(Environment.java:199)
at org.alfresco.repo.template.FreeMarkerProcessor.process(FreeMarkerProcessor.java:218)
... 31 more
任何帮助将不胜感激,
奥利弗
答案 0 :(得分:3)
您好,您指的是JavaScript API,但您正在使用Freemarker对象来检索数据。因此,并非所有JavaScript方法都在Freemarker中实现。
因此,请在JavaScript控制器中使用node.aspectsShort,并将值传递给模型对象到Freemarker模板。
以下是Template node API的参考wiki 以及docs
中的引用答案 1 :(得分:1)
您可以使用shortQName
${shortQName(jsonUtils.toJSONString(aspect))}