Grails indizierte Parameter

8

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.

    
foxdonut 28.11.2009, 02:52
quelle

4 Antworten

6

Ich habe endlich herausgefunden, wie ich das ohne irgendwelche Spielereien machen kann.

Vergessen Sie den versteckten Parameter und verwenden Sie einfach die Team-ID im Seed-Parameter. Im GSP:

%Vor%

Dann in der Steuerung:

%Vor%

Funktioniert wie ein Zauber.

    
foxdonut 09.12.2009, 14:02
quelle
11

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:

%Vor%

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.

    
Stefan Armbruster 02.12.2009 11:05
quelle
1

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.

    
user2782001 31.03.2015 17:17
quelle
-1

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.

    
Sean A.O. Harney 28.11.2009 03:58
quelle

Tags und Links