- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Selbst definierte Java Objekte im CMS verwenden?
Hallo zusammen,
ich habe zwar schon mal in der Community gesucht, bin aber zu keinem Ergebnis gekommen, daher die Frage hier.
Ist es mรถglich dem CMS selbst definierte Objekte beizubringen?
Beispiel:
Ich man definiere in Java eine neue Klasse
public class Mensch {
private int alter;
private long hoehe;
private String vorname;
private String nachname;
// Getter & Setter
// toString
// whatever
}
}
รber ein Modul wird ein Objekt erzeugt und mit Werten befรผllt, welches im Anschluss an das CMS รผbermittelt wird.
Kann ich im CMS irgendwie auf das Objekt mit den Werten zugreifen alร
mein_cms_objekt.getAlter();
$CMS_VALUE(mein_cms_objekt.getAlter())$
??
Kann man das definierte Model als Dependency (oder direkt รผber das Modul) anziehen, sodass das CMS weiร, ok dieses Objekt ist vom Objekttyp "Mensch" und hat alle diese Attribute (auch interessant fรผr Debugger).
Wenn das schon irgendwie geht. lasst mich das bitte wissen, weil wir uns immer extrem abmรผhen alles in eine Map<String,String> zu kapseln, das wir spรคter auf die Werte zugreifen kรถnnen.
Verwendete FS Version 2018-8
Danke und Gruร
Matthias
- Labels:
-
Developers
Accepted Solutions
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi Matthias,
du kannst im Template auf die Eigenschaften des Java-Objekts "ganz normal" zugreifen. Also in deinem Beispiel kannst du sowohl $CMS_VALUE(mensch.getAlter())$ als auch verkรผrzt $CMS_VALUE(mensch.alter)$ benutzen. Voraussetzung ist natรผrlich das die Klasse Mensch eine รถffentliche Methode "getAlter()" hat.
LG, Peter
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hallo Matthias,
suchst Du sowas hier?
Rรผckgabe einer Datenstruktur von einem Executable in ein Template
Viele Grรผรe
Michael
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hallo Michael,
jain.
Was ich vermeiden mรถchte, ist in einem Executable oder in einem einfachen Modul, welches irgendeinen Service aufruft,
dass wir im Modul ein manuelles Mapping der Daten durchfรผhren mรผssen, Bsp.
- ...
- Map<String, Object> result = (Map<String,Object>) params.get("result");
- ...
- result.put("someKey", someResultObject);
- result.put("anotherKey", anotherResultObject);
- ...
- return result;
Sondern, das wir aus dem Beispiel oben, das ganze Objekt "Mensch" zurรผckgeben und verwenden kรถnnen.
Wenn man ein neues Modul entwickelt, wird jeder halbwegs gescheite Java Entwickler Klassen (Models) definieren, mit dem er Objekte erzeugt und mit diesen dann arbeitet.
Meine Frage nun nochmal spezifiziert: Wenn das Modul im Firstspirit Server installiert wird, kann ich dann diese Objekte vom Typ "Mensch", "Human", "Car", was_auch_immer_fรผr_ein_java_Objekt_ich_definiere im CMS verwenden?
Bsp:
Im Template:
$CMS_SET(set_mensch,"Modulname.Mensch.class")$ // definiere Typ der Variable als Mensch aus dem Modul
$CMS_RENDER(script:"some_script_name", result:set_mensch)$
$-- und dann z.B. sowas: --$
$CMS_VALUE(result.someMethod())$ // result ist jetzt vom Typ "Mensch", welches aus dem Modul zurรผckgegeben wird
Im Modul:
Mensch mensch = new Mensch();
...
mensch.setAbc(abc);
mensch.setDef(def);
...
return mensch;
Java ist eine OOP. Derzeit empfinde ich aber, dass das CMS dieses Konzept missachtet.
Ausgenommen alle Objekte, die Java nativ mitbringt.
Hinweis:
Ein Executable ist evtl. ein schlechtes Beispiel, da hier die Signatur fest definiert wird auf Map<String, Object>.
Aber ein eigenes Modul kann ja zurรผck geben, was wir definieren.
Hoffe das ist etwas verstรคndlicher
Gruร
Matthias
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi Matthias,
du kannst im Template auf die Eigenschaften des Java-Objekts "ganz normal" zugreifen. Also in deinem Beispiel kannst du sowohl $CMS_VALUE(mensch.getAlter())$ als auch verkรผrzt $CMS_VALUE(mensch.alter)$ benutzen. Voraussetzung ist natรผrlich das die Klasse Mensch eine รถffentliche Methode "getAlter()" hat.
LG, Peter
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hallo Matthias,
wichtig zu wissen ist hier noch: Der "Umweg" รผber das Executable ist hier nur nรถtig, damit man die Klassen im Modul-Scope lassen kann. Das Executable (aufgerufen per Renderscript) dient hier nur als Zwischenstation, weil Executables eine "Sonderrolle" haben und - solange sie als PUBLIC-Komponente in der Module.xml deklariert sind - รผber den #executable-class-Mechanismus auch aufgerufen werden kรถnnen, wenn ihre Ressourcen im Modul-Scope liegen. Du muss dann dem Executable aus dem Template heraus nur eine leere Map (oder Liste) mitgeben. In diese Liste legt dann das Executable ein beliebiges Objekt hinein und im Template holst Du es Dir wieder heraus.
Ich hoffe das macht es etwas klarer ๐
Viele Grรผรe
Michael
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hallo Peter,
Und das funktioniert, sobald ich das CMS-Modul, welches diese Klassen beinhaltet installiert habe?
Rafft das dann eigentlich auch der Debugger, dass das zurรผckgegebene Objekt von diesem Typ ist (inkl Autocomplete / Vorschlรคge)?
Gruร
Matthias
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Ja, das funktioniert auch im Debugger - da ist ja dann die konkrete Klasse bekannt. Daher ist es an der Stelle egal, das das Executable "untypisiert" ist.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Vielen Dank Euch beiden!
Mein Kollege und ich werden das in den nรคchsten Tagen mal testen.
Jedoch werde ich den Thread als beantwortet kennzeichnen
Gruร
Matthias

