Zum Hauptinhalt gehen

Set Dom-Value in Module -> DomService nicht gefunden

Kommentare

4 Kommentare

  • Holger Höbbel

    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
    Holger

    0
  • sergej.heinrich

    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 auffindbar

     

    Gruß,
    Sergej

    0
  • Holger Höbbel

    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
    Holger

    0
  • Michael Bergmann

    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
    Michael

    0

Bitte melden Sie sich an, um einen Kommentar zu hinterlassen.