awellermann
I'm new here

Combo-Box im ContentCreator dynamisch befüllen

Hallo zusammen,

im Rahmen einer Modulentwicklung versuche ich ein CMS_INPUT_COMBOBOX Feld dynamisch mit eigenen Werten zu füllen. Leider ohne Erfolg Smiley Wink

Dabei halte ich mich relativ nah an den zur Verfügung gestellten Code-Beispielen und z.B. das setzen eines Default-Werts für ein Textfeld funktioniert auch wunderbar:

formData.get(EditorValue.SOLE_LANGUAGE, FELD_NAME).set(new String("Hello World"));

Nur bei der Combo-Box wird nach dem gleichen Schema nichts an Werten angezeigt. Versuche Code aus vorhandenen Beiträgen zu verwenden, scheitertn beim Casten des FormFields und der Initalisierung einer OptionFactory....

Ich verwende die FS-Version 5.1.209.

Es wäre super, wenn ihr mir eine kleine Hilfestellung geben könntet.

Danke und Grüße

Andre

15 Replies
awellermann
I'm new here

Kann mir da niemand helfen?

0 Kudos

Hallo Andre,

ich befürchte, da fehlt mir ein wenig Kontextwissen, um deine Anfrage zu verstehen. Woher kommt das Combobox-Feld, das du dynamisch füllen willst? Sollen die möglichen Auswahlwerte beeinflusst oder der Wert der Eingabekomponente gesetzt werden?

Beste Grüße

Stefan

0 Kudos

Hallo Stefan,

also die Combo-Box ist in einer XML-Datei definiert, welche ich innerhalb des Java-Codes einlese und anschließend darstellen lassen.

Kontext: WebeditInlineEditItemsPlugin bzw. ExecutableInlineEditItem.

<CMS_MODULE>

<CMS_INPUT_COMBOBOX name="name" useLanguages="YES">

                              <ENTRIES>

                              </ENTRIES>

                               <LANGINFOS>

                                 <LANGINFO lang="*" label="text" description="TEXT"/>

                                 <LANGINFO lang="DE" label="text" description="TEXT"/>

                               </LANGINFOS>

</CMS_INPUT_COMBOBOX>

....

final Form form = context.requireSpecialist(FormsAgent.TYPE).getForm(_formDefinition);

operation.setFormData(contentData);

Die definierten Formelemente werden im ContentCreator auch dargestellt (ohne Werte natürlich), nun möchte ich eben diese Combo-Box aus dem Java-Code heraus mit Werten befüllen.

Ich hoffe die Informationen reichen aus.

Grüße

Andre.

0 Kudos

Hi Andre,

da die Liste erlaubter Werte (ENTRIES) in dem XML leer ist, gehe ich dann richtig in der Annahme, dass du mit Werte setzen das Füllen eben dieser Liste meinst? Dann wäre ja der naive Ansatz zunächst, dieses XML entsprechend mit Einträgen zu erweitern. Also bspw. einen Platzhalter in das XML in die Datei schreiben und diesen per Java-Code mit den fehlenden ENTRY-Definitionen zu ersetzen.

Wenn ich das jetzt aber falsch verstehe, und du wirklich den Wert der Eingabekomponente setzen, also die Combobox programmatisch auswählen willst, dann muss dieser gesetzte Wert auch in der Liste erlaubter Einträge sein (aktuell keiner). Dies sollte auch mit Strings funktionieren (falls nicht, bitte Fehlermeldung posten).

Beste Grüße

Stefan

0 Kudos

Hi Stefan!

"da die Liste erlaubter Werte (ENTRIES) in dem XML leer ist, gehe ich dann richtig in der Annahme, dass du mit Werte setzen das Füllen eben dieser Liste meinst? Dann wäre ja der naive Ansatz zunächst, dieses XML entsprechend mit Einträgen zu erweitern. Also bspw. einen Platzhalter in das XML in die Datei schreiben und diesen per Java-Code mit den fehlenden ENTRY-Definitionen zu ersetzen."

Das Problem ist dabei, dass die Anzahl von Einträgen variieren kann.

Grüße

Andre

0 Kudos

Hallo Andre,

ja, ich würde auch nur einen Platzhalter nehmen und ihn einmal mit der generierten Liste ersetzen. Smiley Wink

Beste Grüße

Stefan

0 Kudos

Hallo Stefan,

hättest du da vll einen kleinen Code-Ausschnitt als Ansatz, wie das Ganze aussehen könnte?

Grüße

Andre

0 Kudos

Hm... kann ich leider nicht mit dienen. Würde die Standard-Java-Mittel nutzen:

1. StringBuilder um den XML-Schnipsel für die Einträge aus deiner Quelle zusammensetzen. Also eine Kette von ENTRY-Definitionen.

2. String.replace() nutzen, um den Platzhalter im aus der Datei geladenen Text mit obigem Schnipsel ersetzen.

Ich hoffe, wir reden hier nicht aneinander vorbei.

Beste Grüße

Stefan

0 Kudos

Also ich denke, dass müsste irgendwie so in der Richtung aussehen, wenn es überhaupt mit der <CMS_INPUT_COMBOBOX> möglich ist:

final FormData formData = form.createFormData();

FormField<?> formField =formData.get(ComboboxEditorValue.SOLE_LANGUAGE,

                "name");

GomFormElement gomElement = formData.getForm().findEditor("name");

OptionFactory factory = ((OptionFactoryProvider) gomElement).getOptionFactory();

//An dieser Stelle weiß ich eben nicht was ich übergeben kann, sodass keine Exception fliegt, da als Parameter Object erwartet wird.

formField.set(factory.create("Mein Objekt"));

Ist das überhaupt möglich oder kann man nur ein FS-Objekt z.B. Entity übergeben?

Gruß

Andre

0 Kudos