1

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.ftlperson.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を使用しています。

4

3 に答える 3

4

人々がAlfrescoでRhinoを頻繁に使用する場合は、そこで修正する必要があります。java.util.Date何が起こっているのかというと、FreeMarkerテンプレートは日付に直接使用するのではなく、を使用しますfreemareker.template.TemplateDateModel。FreeMarkerには、object_wrapperオブジェクトをfreemareker.template.Template{Something}Model-sに変換するオブジェクトであると呼ばれる設定があります。どうやら、Alfrescoが使用するオブジェクトラッパーはを知らず、を使用して(FreeMarkerの文字列型である)org.mozilla.javascript.NativeDateに変換します。したがって、ここで、はFreeMarker文字列()はと同じ文字列に評価されるため、その後は失敗します(文字列を呼び出すことはできません)。がFreeMarkerの日付(適切にに変換された)の場合、フォーマッタメソッドに評価されるため、TemplateScalarModeltoString()yourDate?stringyourDateTemplateScalarModelyourDate(...)yourDatejava.util.DateTemplateDateModelyourDate?string(...)それを呼び出すことができた後。

したがって、Rhino(JavaScript)オブジェクトの操作がAlfrescoで一般的である場合、ObjectWrapperRhinoオブジェクトを認識するように拡張する必要があります。たぶん、彼らがする必要があるのは、を混ぜることだけですfreemarker.ext.rhino.RhinoWrapper

于 2012-10-09T21:56:44.210 に答える
3

こんにちは、Freemarker 内で以下を使用できます。

${siteNode.properties["my:customAspectDate"]?date?string("yyyy-MM-dd")}

Alfresco はアクティビティ ダッシュレットでそれを行います。

activity-list.get.html.ftl

于 2012-10-10T12:10:16.590 に答える
1

そして、他の誰かがこの壁に 2 日間ぶつかった場合に備えて、私自身の質問に答えてください。

<#assign nodeR=companyhome.childByNamePath["Sites/" + site.shortName] />
"startdate": "<#if nodeR.hasAspect("my:customAspect")>${nodeR.properties["my:customAspectDate"]?string("yyyy-MM-dd")}</#if>",

フォーラムでも言ったように、なぜこのように機能し、他の方法では機能しないのかわかりません。

于 2012-10-09T17:57:33.583 に答える