【发布时间】:2012-10-09 17:44:07
【问题描述】:
这可能是接近 Alfresco 的人的问题,因为它有点具体。
我在创建网站时添加了一个自定义方面,它拥有日期类型的属性:
<type>d:date</type>
现在,我正在扩展 site.lib.ftl 文件以显示此日期:
"startdate": "<#if site.node.hasAspect("my:customAspect")>${siteNode.properties["my:customAspectDate"]?string("yyyy-MM-dd")}</#if>",
由于无法访问宏本身的 site.node,我扩展了宏参数列表:
<#macro siteJSONManagers site siteNode roles>
所以我可以从 site.get.json.ftl 以及 person.sites.get.json.ftl 调用它:
<@siteLib.siteJSON site=site siteNode=siteNode />
现在,对于 site.get.js,我在 javascript 中准备了 sitenode:
model.siteNode = site.node; // or the same with site.getNode;
我的日期被正确解析。 但是,当从 person.sites.get.json.ftl 调用宏时,我无法在 javascript 控制器中准备 site.node,所以我在 freemarker 中进行(通过直接调用):
<@siteLib.siteJSONManagers site=site siteNode=site.node roles=roles/>
在使用这个表单时,我得到了这个异常:
"09090011 Wrapped Exception (with status template): 09090096 Error during processing of the template 'Expected method. siteNode.properties[\"my:customAspectDate\"]?string evaluated instead to freemarker.template.SimpleScalar on line 59, column 71 in org\/alfresco\/repository\/site\/site.lib.ftl.'. Please contact your system administrator."
如果我只显示这个标量 (${siteNode.properties["my:customAspectDate"]}),我会在生成的 JSON 中得到 org.mozilla.javascript.NativeDate 作为字符串:
"startdate": "org.mozilla.javascript.NativeDate@7a6e5e2e",
我可以通过在 site.get.json.ftl 中为 siteNode 设置相同的参数来重复此操作。 如果我使用 siteNode.properties["cm:created"],我什至可以重复它。
在我看来,当 javascript 控制器从节点创建模型对象时,创建的日期道具被创建为 java.util.Date 或 Freemarker 使用的任何内容,并且当 Freemarker 本身创建该属性时,它将被转进入 org.mozilla.javascript.NativeDate。
谁能指出我如何改进我的代码以显示日期?我可以使用什么来让我的调用获得相同的值?
如果有什么不同的话,我正在使用来自 SVN HEAD 的 Alfresco。
【问题讨论】:
标签: alfresco freemarker