-
Notifications
You must be signed in to change notification settings - Fork 0
Controller
Ein Controller ist für die Bearbeitung von Webanfragen zuständig. Ein Controller besteht in der Regel aus dem CRUD-Scaffolding. CRUD steht für Create, Read, Update, Delete. Dies sind die standartmässigen Funktionalitäten eines Controllers, sodass er Datensätze erstellen, lesen, verändern und löschen kann.
Bei Grails gibt es die Möglichkeit Dynamic Scaffold zu verwenden. Durch dessen Verwendung wird einem Controller zur Laufzeit das Grundgerüst für CRUD bereitgestellt, ohne dieses selbst schreiben zu müssen.
Der folgende Code ist ein Beispiel für diese Verwendung
class UserController {
static scaffold = User
}
Der obige Code erstellt im Controller UserController das Grundgerüst für CRUD in Verbindung mit der Domainklasse User.
Es gibt aber auch die Möglichkeit Static Scaffold zu benutzen. Dafür muss man den Befehl generate-all DOMAINCLASS-NAME benutzen. DOMAINCLASS-NAME wird durch den Namen der Domainklasse ersetzt, für die man einen Controller erstellen möchte. Nach dem erfolgreichen Ausführen des Befehls, wurde der Controller erstellt. Hat man jedoch bereits einen Controller für die Domainklasse angelegt, so muss man den Befehl mit -force erweitern, sodass er den alten Controller überschreibt. Dafür sieht der komplette Befehl dann so aus: generate-all DOMAINCLASS-NAME -force.
Ein Controller mit einem Static Scaffold sieht dann zum Beispiel so aus:
class DepartmentController {
DepartmentService departmentService
static allowedMethods = [save: "POST", update: "PUT", delete: "DELETE"]
def index(Integer max) {
params.max = Math.min(max ?: 10, 100)
respond departmentService.list(params), model:[departmentCount: departmentService.count()]
}
def show(Long id) {
respond departmentService.get(id)
}
def create() {
respond new Department(params)
}
def save(Department department) {
if (department == null) {
notFound()
return
}
try {
departmentService.save(department)
} catch (ValidationException e) {
respond department.errors, view:'create'
return
}
request.withFormat {
form multipartForm {
flash.message = message(code: 'default.created.message', args: [message(code: 'department.label', default: 'Department'), department.id])
redirect department
}
'*' { respond department, [status: CREATED] }
}
}
def edit(Long id) {
respond departmentService.get(id)
}
def update(Department department) {
if (department == null) {
notFound()
return
}
try {
departmentService.save(department)
} catch (ValidationException e) {
respond department.errors, view:'edit'
return
}
request.withFormat {
form multipartForm {
flash.message = message(code: 'default.updated.message', args: [message(code: 'department.label', default: 'Department'), department.id])
redirect department
}
'*'{ respond department, [status: OK] }
}
}
def delete(Long id) {
if (id == null) {
notFound()
return
}
departmentService.delete(id)
request.withFormat {
form multipartForm {
flash.message = message(code: 'default.deleted.message', args: [message(code: 'department.label', default: 'Department'), id])
redirect action:"index", method:"GET"
}
'*'{ render status: NO_CONTENT }
}
}
protected void notFound() {
request.withFormat {
form multipartForm {
flash.message = message(code: 'default.not.found.message', args: [message(code: 'department.label', default: 'Department'), params.id])
redirect action: "index", method: "GET"
}
'*'{ render status: NOT_FOUND }
}
}
}
This wiki was created using Grails version 4.0.9 and Java 1.8.0_281!
The wiki was last updated with the release of the Tag v0.1.3-PrototypeForRating!