| 

.NET C# Java Javascript Exception

Neues Objekt mit Werten aus Besthendem erzeugen

Dies ist das Archiv des ehemaligen Forums zum Thema Groovy, Grails, Griffon und Bean Scripting Framework, welches unter groovy-forum.de existierte. Die neue Adresse des Groovy-Forums ist: http://codekicker.de/fragen/themen/groovy.


Neues Objekt mit Werten aus Besthendem erzeugen

Mario - 18.08.2009 21:46
Hallo Forum

Problem: Ich möchte ein neues Objekt anlegen. Die Werte für das Objekt sollen aber aus einem bereits bestehenden Objekt kommen und ggf ergänzt/verändert werden.

Mein Vorgehen:


def objekt = {
       //hier wird das bestehende Objekt geholt
       def a_Instance = A.get( params.id ) 
        if(!a_Instance) {
            flash.message = "Message not found with id ${params.id}"
            redirect(action:list)
        }
        //wenn alles prima ist...
        else {
            def a_new = new A()       
             //Werte werden zugewiesen (da bin ich mir schon nicht sicher,ob das so stimmt)                    
            a_new.properties = a_Instance.properties

            //verändere a_new
           a_new.attr1 = null
           ....
                       
            render(view:'create',model:[a_new:a_new])
            
    }
}

Wenn ich das so mache, lande ich in der create-view (was ja gut ist) aber leider sind alle Felder der View leer (anstatt, das da wie erhofft die Werte aus a_new stehen).


Erstelle ich im Else-Zweig kein neues Objekt sondern benutze das Alte und verändere die Werte da, sieht das zB so aus:

else{
            a_Instance.attr1 = "hallo"
            a_Instance.attr2 = null
            ...

            render(view:'create',model:[a_Instance:a_Instance])                       
}

Ich vin ebenfalls in der create-View und die Werte stehen da abgeändert. Wenn ich auf den Save-Button drücke habe ich auch ein neues Objekt mit neuer ID. Allerdings wird das alte Objekt dabei überschrieben. Es gibt also 2 mal das Gleiche (natürlich mit unterschdl ID bzw Versionsnummer).

Ich würe jetzt gerne wissen, wie ich es entweder hinbekomme meinem im 1. Versuch neu erzeugten Objekt die Werte vernünftig zuzuordnen, oder im 2. Versuch das überschreiben zu verhindern...

Oder 3. einen ganz anderen Tipp zu bekommen. Das soll ja manchmal auch helfen.

Gruß
Mario


Re: Neues Objekt mit Werten aus Besthendem erzeugen

saurier - 19.08.2009 00:37
Hallo Mario,

ich vermute der Fehler liegt hier:

In der ersten Version steht:
render(view:'create',model:[a_new:a_new])
in der zweiten steht:
render(view:'create',model:[a_Instance:a_Instance])
Da in der zweiten Version Werte angezeigt werden, in der ersten aber nicht, wird im create.gsp wahrscheinlich
auf a_Instance zugegriffen. Du musst das dann auch in der ersten Version so nennen:
render(view:'create',model:[a_Instance:a_new])
Damit sollte dann die erste Version funktionieren. Das kopieren von Objekten ist
generell eine heikle Sache , aber das will ich jetzt nicht weiter vertiefen - ist schon
etwas spät :-)

Gruß, Christian


Re: Neues Objekt mit Werten aus Besthendem erzeugen

saurier - 19.08.2009 12:17
Hallo Mario,

ich vermute dein Problem liegt bei dieser Schreibweise (war zumindest bei mir am Anfang so):
[person:person]
Links vom Doppelpunkt steht hier nicht etwa ein Objekt person, sondern ein String. Es ist
absolut identisch mit:
['person':person]
Damit kannst du dann im View auf das Objekt person unter dem Namen "person" zugreifen. Es
ist also einfach nur eine Map mit Schlüssel und Wert. Wenn du:
['hotelgast":person]
schreibst, dann kannst/musst du im View 'hotelgast' benutzen um auf die person zuzugreifen. Also:
hotelgast.vorname
Du kannst auch mehrere Objekte übergeben:
['gast':person1, 'begleiter':person2]
Alles klar?

Die Kopier-Problematik hat Christian ja schon erklärt, man muss halt immer darauf achten,
ob man Werte oder Referenzen kopiert.

Gruß, Christian


Stelle deine Groovy-Frage jetzt!


Diese Seite zeigt den Thread "Neues Objekt mit Werten aus Besthendem erzeugen" der ehemaligen Webseite groovy-forum.de, welche durch einen Serverunfall zerstört wurde. codekicker.de hat viele Konversationen über die beliebte Programmiersprache Groovy und zugehörige Frameworks wie das Grails-Framework retten können.

Hast Du eine Frage zum Thema Groovy, Grails oder allgemein Java? Viele ehemalige groovy-forum.de Mitglieder beantworten dir auf codekicker.de deine Frage! Stelle jetzt eine Frage!

Viele weitere Diskussionen zu Grails und Groovy befinden sich auf der Threadübersicht des alten groovy-forum.de.