Annika
I'm new here

no target selected - Undefined field 'getUrl'!

Hallo zusammen,

seit einer Woche arbeite ich nun frisch in einem unserer FirstSpirit Projekte und kümmere mich gerade darum die Generierungsfehler zu analysieren und zu beheben um mich in das Projekt einzuarbeiten.

Einer der Fehler bereitet mir jedoch Kopfzerbrechen und da alle meine Kollegen ausgefallen sind, kann ich mich aktuell mit Niemandem direkt austauschen.

Ich bekomme den allseits bekannten Fehler:
ERROR 13.02.2019 10:37:17.962{g-node=619051} (de.espirit.firstspirit.generate.SiteProduction): no target selected


An dieser Stelle sollte es vermutlich eine Referenz geben, die ins Leere führt. Durch das Templatedebugging $CMS_SET(#global.debugMode,true)$ habe ich die exakte Position bestimmen können.

$CMS_SET(set_ft_refUrl, ref(paramRef, abs:2, lang:if( !paramLang.isEmpty, paramLang, #global.language.abbreviation)).getUrl)$

über einige Debug-Ausgaben weiß ich aber auch, dass die Methoden valide Ergebnisse zurückliefern:

$CMS_SET(anha, "ANHA Logolink: " +

map_ps_areaprojectsettings.logoLink.get() +

"lang: " +

if(!paramLang.isEmpty,paramLang,#global.language.abbreviation) +

"just ref: " +

ref(map_ps_areaprojectsettings.logoLink.get(),abs:2,lang:if(!paramLang.isEmpty,paramLang,#global.language.abbreviation)) +

"ref url: " +

ref(map_ps_areaprojectsettings.logoLink.get(),abs:2,lang:if(!paramLang.isEmpty,paramLang,#global.language.abbreviation)).getUrl)$

Ergebnis:

ANHA Logolink: <PAGEREF editor="111109" htmlname="Home" id="633019" pageref="632957" releaseRevision="505599" releasedby="111109" revision="505599" uniquedescription="005_home_1">

<LANG displayname="Home" language="DE"/>

<PAGE_LANG_SPEC language="DE" showinpagegrp="1" showinsitemap="1"/>

</PAGEREF>

lang: DE

just ref: de.espirit.firstspirit.generate.ContentProducerReference@b5fe68bref

url: /r/de/home/home.html

Eine weitere Spur zu dem Problem ist ein Warning, welches mir direkt nach dem Error ausgegeben wird:
WARN  13.02.2019 11:29:52.293{g-node=619051} (de.espirit.firstspirit.generate.SiteProduction): Undefined field 'getUrl'!

An dieser Stelle verstehe ich nicht, weshalb "getUrl" als field erkannt wird. Die Methode gibt schließlich wie sie es soll die URL der Referenz zurück.
Wenn ich mir das ApiDoc von ref(map_ps_areaprojectsettings.logoLink.get(),abs:2,lang:if(!paramLang.isEmpty,paramLang,#global.language.abbreviation)) ausgeben lasse, ist dort "getUrl()" ebenfalls aufgelistet.

Hat Jemand eine Idee was hier passiert, oder wie ich den Fehler beheben kann? Ich sehe langsam den Wald vor lauter Bäumen nicht mehr... :smileyconfused:

Vielen Dank und viele Grüße,
Annika

0 Kudos
4 Replies
mbergmann
Crownpeak employee

Hallo Annika,

versuch erstmal, entweder .getUrl() - also mit Klammern - oder nur .url (ohne Klammern) zu benutzen.

Letzteres ist die sog. „Beanshell-Syntax“ wo parameterlose Getter wie öffentliche Attribute angesprochen werden können - dann aber ohne das get...

Die „Mischform“ ist eher unüblich.

Das ist aber wahrscheinlich nicht der Grund für den Fehler. Wo kommt das paramRef denn her und vor allem: was ist es für ein Typ? Ich vermute, dass da nicht „das Richtige“ in der Variablen steckt. Dadurch funktioniert dann das ref(...) nicht, was zu einem „falschen“ Objekt als Ergebnis führt, das dann eben keine Methode getUrl() hat.

Viele Grüße

Michael

0 Kudos

Hallo Michael,

paramRef ist ein Wert der über die $CMS_Render()$-Parameter an das Template übergeben wird.

paramRef: class de.espirit.firstspirit.store.access.sitestore.PageRefImpl

Durch das Apidoc weiß ich, dass die Klasse die Methode getUrl() unterstützt.

Mir fällt aber gerade auf, während ich die Methoden hier herein kopiere, dass diese vermutlich nicht richtig verwendet werden. Ein einfaches Anhängen der Methode wird an dieser Stelle vermutlich nicht akzeptiert und ich muss die erwarteten Parameter un den Klammern einfügen?

java.lang.String getUrl(de.espirit.firstspirit.access.UrlCreatorProvider, de.espirit.firstspirit.access.Language, de.espirit.firstspirit.access.project.TemplateSet, de.espirit.firstspirit.access.store.PageParams, int)

java.lang.String getUrl(de.espirit.firstspirit.access.UrlCreator, de.espirit.firstspirit.access.Language, de.espirit.firstspirit.access.project.TemplateSet, de.espirit.firstspirit.access.store.PageParams, int)


Bin ich damit auf dem richtigen Weg, oder gibt es noch eine leichtere Möglichkeit? Das kommt mir recht komplex vor alles nocheinmal umzubauen, dafür dass sich das Template schon richtig verhält und ich nur einen Generierungsfehler beseitigen möchte.

Vielen Dank und viele Grüße,
Annika

0 Kudos
mbergmann
Crownpeak employee

Hallo Annika,

das sind hier zwei unterschiedliche Paar Schuhe. Ja, man kann sich aus einer PageRef selbst die URL geben lassen - das wäre quasi der "reine API-Weg". Das ref(...) nimmt einem aber genau das ab, insbesondere nutzt es die aktuellen Kontext-Informationen (Sprache, TemplateSet usw.) wenn man sie nicht "überschreibt".

Nur um sicherzugehen dass ich Dich richtig verstanden habe: Das Generat (und nicht nur das der Vorschau sondern in der "echten" Generierung) ist am Ende völlig in Ordnung und Du hast nur diese lästigen Generierungsfehler? Das hatte ich vorher nämlich anders interpretiert.

Falls das so ist: Kommt die Fehlermeldung vielleicht aus einem anderen Sprach- oder Vorlagenkanal?

Viele Grüße

Michael

0 Kudos

Hallo Michael,

leider darf ich an diesem Thema nicht weiter arbeiten.
Der Generierungsfehler tritt in einem Template auf, welches nicht von uns ist. Das wusste ich nicht als ich damit angefangen hatte.
Sollte ich jedoch trotzdem irgendwann eine Lösung aufschnappen, werde ich das hier noch kommentieren.

Vielen Dank für deinen Hilfe-Versuch. : )

0 Kudos