2 Stimmen

Grails Domain, ohne es zu speichern

Ich habe :

def userList = [];
if(!User.findAllByGrade(10)){
   userList.add(new User());
}else{ ..... } 

Ich muss ein Formular anzeigen, unabhängig davon, ob der Benutzer existiert oder nicht ... also füge ich einfach einen "Dummy"-Benutzer zur Liste hinzu. Aber dadurch treten Fehler auf:

Nachricht: Objekt bezieht sich auf eine nicht gespeicherte vorübergehende Instanz - speichern Sie die vorübergehende Instanz, bevor Sie flushen: Benutzer Verursacht von: Objekt bezieht sich auf eine nicht gespeicherte vorübergehende Instanz - speichern Sie die vorübergehende Instanz, bevor Sie flushen: Benutzer

Ich könnte verwenden, um die Formulare zu kopieren, aber ich frage mich nur, wie ich das lösen kann ...

1voto

Hoàng Long Punkte 10501

Wie wäre es mit dem if-else Taglib:

0voto

Erich Kitzmueller Punkte 35336

Ein bisschen schmutzig, aber es sollte funktionieren:

def userList = [];
if(!User.findAllByGrade(10)){
   userList.add([:]);
}else{ ..... } 

Also anstatt eine neue Benutzerinstanz zu erstellen, füge einfach ein leeres Hashtabellenobjekt zur Liste hinzu; wenn das Ergebnis nicht in Ordnung aussieht, musst du ein wenig mehr arbeiten:

def userList = [];
if(!User.findAllByGrade(10)){
   userList.add([name:"", age:"", foobar:""]);
}else{ ..... } 

D. h. erstelle Einträge in der Hashtabelle, die den Attributen von User entsprechen.

0voto

jrd Punkte 2977

Wie wäre es, null stattdessen zur Liste hinzuzufügen, anstelle von new User() und dann in gsp, auf die Eigenschaften des Benutzers unter Verwendung des sicheren Navigationsoperators .? zu verweisen (wie user?.name, so dass keine NPE geworfen wird)

Also wird der Code eher so aussehen:

def userList = [];
if(!User.findAllByGrade(10)){
   userList. << null
}else{ ..... }

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X