Search the FirstSpirit Knowledge Base
Hallo zusammen,
im Rahmen einer Modulentwicklung versuche ich ein CMS_INPUT_COMBOBOX Feld dynamisch mit eigenen Werten zu füllen. Leider ohne Erfolg
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
Kann mir da niemand helfen?
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
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.
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
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
Hallo Andre,
ja, ich würde auch nur einen Platzhalter nehmen und ihn einmal mit der generierten Liste ersetzen.
Beste Grüße
Stefan
Hallo Stefan,
hättest du da vll einen kleinen Code-Ausschnitt als Ansatz, wie das Ganze aussehen könnte?
Grüße
Andre
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
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