Set Dom-Value in Module -> DomService nicht gefunden
Hallo,
wir haben ein älteres Modul, was ein Dom-Feld füllt. Nach Update FirstSpirit gibt es seit paar Jahren das Packet import de.espirit.firstspirit.access.editor.DomService nicht und *Impl Klassen dürfen im isolated-Mode nicht verwendet werden. Gibt es eine einfache Lösung ein DOM Feld zu füllen?
this.editor.set(lang, DomElementImpl.fromXml(value));
VG
Sergej
-
Hallo Sergej,
ich nehme an, DOM Feld meint eine CMS_INPUT_DOM Eingabekomponente?
Wenn ich es richtig verstehe, liegen die zu schreibenden Daten bereits als (passendes) XML vor. Dann hilft Dir wahrscheinlich dieses einfache Beanshell Skript weiter, mit dem man "Hello World" in einen CMS:INPUT_DOM schreiben kann:
element.setLock(true);
fd = element.getFormData();
ff = fd.get(null,"myDomComponent");
ff.set("<p>Hello <b>World</b></p>");
element.setFormData(fd);
element.save();
element.setLock(false);Oder als Textversion: Du holst Dir das FormField der CMS_INPUT_DOM Eingabekomponente aus dem FormData des Elements (Page, Section, Dataset, ...). Mittels FormFiels.set(String xml) schreibst Du den neuen Inhalt in das FormField und danach schreibst Du das FormData zurück in das Element und speicherst dieses.
Viele Grüße
Holger0 -
Hallo Holger,
gemeint war das ganze aus einem Modul heraus abseits von FirstSpirit. Ich finde die Klassen nicht, die es bis 2021 gab, aber auch keine alternativen Herangehensweisen.Diese imports hatte ich vorher:
import de.espirit.firstspirit.access.editor.DomEditorValue; <- Deprecated
import de.espirit.firstspirit.access.editor.value.DomElementImpl; <- statt Impl gibt es DomElement, aber mit weniger Methiden
import de.espirit.firstspirit.access.editor.DomService; <- nicht auffindbarGruß,
Sergej0 -
Hallo Sergej,
das hatte ich auch so verstanden. Aber es geht doch darum, in einen vorhandenen CMS_INPUT_DOM ein passendes XML zu schreiben, oder?
Wenn ja, versuch doch mal den Ansatz, den ich im vorhergehenden Post geschrieben habe. Hol Dir das FormData Element aus dem entsprechenden Knoten in FirstSpirit, daraus das FormField des CMS_INPUT_DOM. in dieses kannst Du das XML direkt rein als String rein schreiben.
Viele Grüße
Holger0 -
Hallo Sergej,
Sicherheitshalber zur Klarstellung: *Impl-Klassen sollten (bis auf explizit in der Doku genannte Ausnahmen) auch schon vor dem Isolated Mode nicht benutzt werden, da es interne Klassen sind, die sich ohne Ankündigung jederzeit ändern können. Im Zuge der Umstellung auf Isolated wurde die Nutzung der meisten dieser Klassen lediglich auch technisch unterbunden.
Abgesehen vom DOM-Thema scheint euer Code noch auf den "EditorValues" zu basieren, erkennbar an "this.editor.set(lang, domElement)". Schon seit längerem sollte hier der Weg über FormData +/ FormField<T> genutzt werden (siehe auch den entsprechenden Hinweis im JavaDoc und auch das Beispiel von Holger). Ein Unterschied ist hier, dass die Sprachunterscheidung "eine Ebene vorher" passiert.
Zum Thema DOM: Der FormData/FormField-Weg hier geht letztlich auch über ein DomElement (da man bei einem DOM ein FormField<DomElement> hat.
Heißt: Zunächst holt man sich das DomElement aus der DOM-Eingabekomponente (das DomElement ist immer vorhanden - auch wenn die Eingabekomponente "leer" ist) - hier mal beispielhaft aus einer Page:
FormData formData = page.getFormData();
DomElement domElement = (DomElement) formData.get(lang,"st_myDomInputName").get();
//... DomElement ändern
formData.get(lang,"st_myDomInputName").set(domElement);Auf dem DomElement gibt es dann mehrere Methoden, insbesondere DomElement.set(String xml) - das könnte in deinem Fall passen.
Viele Grüße
Michael0
Please sign in to leave a comment.
Comments
4 comments