Ich habe eine Liste von Team
Objekten, die eine Integer seed
Eigenschaft haben. Ich möchte alle Samenkörner der Teams gleichzeitig in einer einzigen Form bearbeiten. Ich bin mir sicher, dass Grails indizierte Parameter unterstützt, aber ich kann es nicht zum Laufen bringen.
Hier ist, was ich habe, und es funktioniert, aber ich spring durch Weg zu viele Reifen und es muss einen besseren Weg geben.
gsp:
%Vor%Controller:
%Vor%Ist das nicht schrecklich? Viel zu viel Lärm. Wie kann ich etwas wie folgt machen:
%Vor% Das heißt, wie ordne ich Parameter namens team[0].seed
, team[0].id
, team[1].seed
, team[1].id
einer Liste zu?
In Streifen können Sie einfach eine List<Team>
Eigenschaft haben und es wird einfach funktionieren. Ich erwarte nicht weniger von Grails! ; -)
Vielen Dank im Voraus für Ihre Hilfe.
params
ist mehr als eine reguläre Map, es ist ein GrailsParameterMap
, das automatisch Sub-Map-Strukturen aufbaut, die auf der Aufteilung der Parameternamen nach '.' basieren. Sie können dies ausnutzen, indem Sie das folgende gsp verwenden:
Hinweis: In den Namensattributen ist kein []. Der Controller ist jetzt ziemlich einfach mit einigen schwarzen Grails Magie:
%Vor% Die erste Operation findAll
filtert alle Parameter mit einem Punkt nach innen heraus. Der Rest ist eine Karte mit Karten, die die Zeilen-ID in k
und die id
und seed
in v
enthalten.
Ich hoffe, dies beantwortet Ihre Frage.
Im Jahr 2015 .... Grails funktioniert jetzt ein wenig anders und du wirst vielleicht eher in Strings als in die erwarteten Sub-Maps geraten etwas wie ..
%Vor%EDIT: Übrigens ...
Eingaben, die denselben Namen haben, wie
%Vor%Werden in eine Liste aufgenommen, wenn mehr als eine eingereicht werden. Also, wenn beide oben überprüft wurden
%Vor%Sie würden eine Liste bekommen.
Aber wenn nur eins überprüft wird, erhältst du KEINE Liste (zumindest in der Grals-Version, die ich verwende), du erhältst einen einzelnen Wert.
%Vor%Das heißt in einem Controller, wenn ich etwas wie
machen würde %Vor%Es würde einen Fehler auslösen, wenn nur ein Artikel gesendet wurde. Eine groovige Möglichkeit, dies zu umgehen, ist
%Vor%Wenn der Parameter gesetzt ist und keine Liste, wird der Wert in die leere Liste geschrieben; Wenn der Parameter festgelegt ist und eine Liste enthält, fügt der Plus-Operator alle einzelnen Werte zur leeren Liste hinzu; Wenn der Parameter nicht festgelegt ist, fügt er zwei leere Listen zusammen, wodurch eine einzelne leere Liste erstellt wird.
Ich bin mir nicht sicher, ob das hilft, aber Sie könnten eine Schließung damit machen wie:
%Vor%Sie könnten wahrscheinlich eine Liste erstellen, die HTML ausgibt. oder baue dein Formular damit auf.
Tags und Links grails properties indexed