| 

.NET C# Java Javascript Exception

hasMany: eigene statische Methoden hinzufügen

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.


hasMany: eigene statische Methoden hinzufügen

Alp - 04.03.2009 14:52
Ich habe eine Domainklasse mit einer hasMany-Beziehung:
class Foo {
    static hasMany = [bars: Bar]
}
Und die entsprechende andere Klasse:
class Bar {
    static belongsTo = Foo
}

Jetzt möchte eine Funktion definieren welche ich auf der hasMany-Beziehung aufrufen kann, z.B.:
def foo = Foo.list()
def customVar = foo.bars.myCustomMethod()

Idealerweise bräuchte ich in der Bar-Klasse jetzt eine Definition à la:
class Bar {
    static belongsTo = Foo

    static myCustomMethod() { bars ->
        // tu was mit "bars"
    }
}

Möglich? Wenn ja wie?


Re: hasMany: eigene statische Methoden hinzufügen

Alp - 04.03.2009 19:14
Das Problem an deiner Methode ist dass ich bars erneut per Parameter wieder übergeben muss, das macht nicht soviel Sinn und ist wie gesagt unelegant.

Ich möchte direkt auf einer Hibernate Collection (was bars ja glaube ich ist) eine eigene Methode definieren, welche automatisch auf die Collection Zugriff hat. Konkret geht es bei mir um Tags zu bestimmten Inhalten:

Es gibt Tags:

class Tag {
	static hasMany = [taggings: Tagging]

	String name
}

Entsprechend gibt es auch Content und User. Und es gibt Taggings:

class Tagging {
	static belongsTo = [content: Content, tag: Tag, user: User]
}

Wenn ich jetzt mir jetzt eine Tagcloud bauen möchte wäre es schön wenn ich folgendes eintippen könnte:

def taggings = Taggings.list()
def tagCloud = taggings.getTagCloud()

Der Vorteil ist dass ich direkt in taggings die error Variable nutzen kann falls Fehler auftreten. Ausserdem kann ich Tagclouds auf wirkliche alle Taggings Collections anwenden, was sehr komfortabel ist. Momentan hab ich den Tagcloud-Code in einem TagService drin, was aber etwas weniger elegant ist wie ich finde.


Re: hasMany: eigene statische Methoden hinzufügen

koeberle - 05.03.2009 16:26
Das was du machen willst gehört meiner Meinung nach in den Controller oder in einen Service aber nicht in die Domain-Klasse.
Warum machst du im Controller nicht einfach Folgendes?
    def tagCloud = [:]
    def taggings = Taggings.list()
    taggings.each{tagCloud[it.tag] ++ }

Und schau dir mal das an: RichUI PlugIn - TagCloud

Grüße,

Christian


Stelle deine Groovy-Frage jetzt!


Diese Seite zeigt den Thread "hasMany: eigene statische Methoden hinzufügen" 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.