| 

.NET C# Java Javascript Exception

Re: Validierungsfehler von Service an View übermitteln

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.


Re: Validierungsfehler von Service an View übermitteln

WaRRiE - 08.04.2010 12:48
Ich stelle das durch einen normalen Validator in der Domain sicher. ;-)

Der Service prüft nur, ob der Validator in der Domain fehlschlägt. Falls ja, wird ein Rollback gemacht, da die addTo* Methoden die Beziehungen anlegen, egal ob ein Validator fehlschlägt oder nicht.

Das ganze geschieht in einem Request, ohne WebFlow. Ich habe das normale Scaffolding von Grails genommen und nur angepasst. Ich bin dabei im "edit" View von einer Person. In diesem View gibt es eine Liste (g:select) mit den vorhandenen Organisationen. Ich wähle eine Organisation aus und betätigte den "Add" Button rechts neben der Liste (selbst angelegt). Im Controller wird dann die entsprechende Id der Organisation an den Service übergeben. Wenn die Erstellung der Relation im Service fehlschlägt, soll der Controller wieder in den "edit" View weiterleiten, damit die Fehlermeldungen im View (errors Objekt) angezeigt werden.

Ich hoffe ich konnte mich verständlich machen. :-)


Re: Validierungsfehler von Service an View übermitteln

WaRRiE - 12.04.2010 13:29
Nachdem ich das addTo überschrieben habe, hat zwar alles soweit im UI geklappt, aber irgendwie komme ich dann mit den Unit-Test davon nicht klar.

Deshalb habe ich mir mein Problem nochmal angeschaut. Ich möchte ja z. B. dass die 1:N Relation maximal 2 Kinder haben darf. Deshalb habe ich einfach mal folgendes probiert:

Class A {

  static hasMany = [b:B]

  static constraints = {
    b(size: 0..2)
  }
}

Class B {
  A a
}

Und das hier mache ich in der Controller Action:

if(params.bId != "null") {
   def aInstance = A.get(params.id)
   def bInstance = new B(["a.id": aInstance.id])
                       
   aInstance.addToB(bInstance)
                       
   render(view: "edit", model: [aInstance: aInstance])
} else {
          flash.message = "Please choose..."
          redirect(action: edit, id: params.id)
  }

Das ist eigentlich die Standardlösung für meine Anforderung, würde ich meinen. Jetzt ist es aber so, dass der Constraint aus Klasse A zwar fehlschlägt, ein 3. Objekt aber trotzdem als Relation angelegt. Eigentlich würde ich erwarten, dass der Constraint fehlschlägt (ist der Fall) aber die Relation NICHT commited wird.

Ich bin mir eigentlich relativ sicher, dass das mal früher genau so funktioniert hat. Ich benutze Grails 1.2.2. Spricht irgendwas dagegen, wie ich es programmiert habe? Hat irgendeiner eine Idee was ich falsch mache? Oder ist das einfach works-as-designed?


Stelle deine Groovy-Frage jetzt!


Diese Seite zeigt den Thread "Re: Validierungsfehler von Service an View übermitteln" 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.