2017-11-30 2 views
0

Ich verwende eine Freemarker-Vorlage, um Webinhalte anzuzeigen, die in einem Asset-Publisher aufgelistet sind.Zugriff auf Portlet-Namespace in Freemarker-Vorlage

In der Vorlage Ich versuche, das Portlet-Namespace zuweisen, um einige Asset-Funktionen zu verwenden (wie das Drucken die Eingabe) wie diese

<#attempt> 
    <#assign namespace = request["portlet-namespace"]> 
    <#recover> 
    <#assign namespace = 'undefined'> 
</#attempt> 

So wird die Drucktaste gedrückt hält te Code unten

<a href="javascript:${namespace}printPage_0();" title='Print'> 

printPage ist die Methode in liferay Asset Publisher-Code verwendet in asset_print.jspf

Nun, funktioniert alles gut: wenn Beim Überprüfen der Seite in einem Browser habe ich überprüft, dass der Namespace berechnet und der Namespace-Variablen zugewiesen wurde (und kein Fehler in der Benutzeroberfläche angezeigt wird). Allerdings meldet Liferay Portal des jedes Mal nach den Benutzern die gesamten Web-Inhalte zu sehen versucht (dh. Klickt auf mehr lesen) aus dem Asset-Verlag

Expression request["portlet-namespace"] is undefined on line 

Wer hat dieses Problem gesehen? Gibt es eine andere Möglichkeit, den Portlet-Namespace in einer Freemarker-Vorlage abzurufen?

Antwort

1

#attempt/#recover ist nicht für die Wiederherstellung aus normalen Situationen und protokolliert standardmäßig den Fehler, wenn es wiederhergestellt wird (so dass die Betreiber alarmiert werden). Sie sollten stattdessen die exp!default Betreiber:

<#assign namespace = request["portlet-namespace"]!'undefined'> 

(Obwohl ich nicht sicher bin, warum Druck undefinedprintPage_0(); Sinn macht, aber das ist ein anderes Thema.)