| 

.NET C# Java Javascript Exception

Frage zu URLMappings

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.


Frage zu URLMappings

charms - 28.08.2010 23:34
Hallo zusammen, <_42_52_ /> <_42_52_ /> Ich habe einen Controller, der Methoden für REST, wie auch für HTML enthält. Für die REST Methoden habe ich customized URLMappings angelegt (/api/shop) wie untenstehend ersichtlich. Danach habe ich die HTML views erstellt mit grails generate-views. Die Methoden darin, sollten über das default URL Mapping angesprochen werden (/$controller/$action?/$id?). <_42_52_ /> <_42_52_ /> Ich möchte also für die REST Methoden /api/shop als URL verwenden, für die HTML Methoden aber ganz normal /$controller/$action?/$id?. <_42_52_ /> <_42_52_ /> Mein Problem ist nun, dass Grails per default anstatt /$controller/$action?/$id? /api/shop verwendet. Auch für die Methoden, bei denen ich eigentlich /$controller/$action?/$id? verwenden möchte. Wenn ich also versuche einen neuen Datensatz über die HTML views zu speichern, wird anstatt /shop/save /api/shop/save aufgerufen. <_42_52_ /> <_42_52_ /> <_42_52_ /> Kann mir vielleicht jemand sagen, was ich falsch mache bei den URLMappings? <_42_52_ /> <_42_52_ /> URLMappings.groovy: <_42_52_ /> <_50_52_45_ CLASS="bbcode">class UrlMappings { static mappings = { "/$controller/$action?/$id?"{ constraints { // apply constraints here } } "/"(view:"/index") "500"(view:'/error') // Shop rest actions "/api/shop" (controller: "shop") { action = [ GET: "api_list", POST: "api_save" ] } "/api/shop/$id" (controller: "shop") { action = [ GET: "api_show", PUT: "api_update", DELETE: "api_delete" ] } } } <_42_52_ /> ShopController.groovy: <_42_52_ /> <_50_52_45_ CLASS="bbcode">package bonuspointsserver import grails.converters.XML class ShopController { def scaffold = false static allowedMethods = [save: "POST", update: "POST", delete: "POST"] def index = { redirect(action: "list", params: params) } def list = { params.max = Math.min(params.max ? params.int('max') : 10, 100) [shopInstanceList: Shop.list(params), shopInstanceTotal: Shop.count()] } def create = { def shopInstance = new Shop() shopInstance.properties = params return [shopInstance: shopInstance] } def save = { def shopInstance = new Shop(params) if (shopInstance.save(flush: true)) { flash.message = "${message(code: 'default.created.message', args: [message(code: 'shop.label', default: 'Shop'), shopInstance.id])}" redirect(action: "show", id: shopInstance.id) } else { render(view: "create", model: [shopInstance: shopInstance]) } } def show = { def shopInstance = Shop.get(params.id) if (!shopInstance) { flash.message = "${message(code: 'default.not.found.message', args: [message(code: 'shop.label', default: 'Shop'), params.id])}" redirect(action: "list") } else { [shopInstance: shopInstance] } } def edit = { def shopInstance = Shop.get(params.id) if (!shopInstance) { flash.message = "${message(code: 'default.not.found.message', args: [message(code: 'shop.label', default: 'Shop'), params.id])}" redirect(action: "list") } else { return [shopInstance: shopInstance] } } def update = { def shopInstance = Shop.get(params.id) if (shopInstance) { if (params.version) { def version = params.version.toLong() if (shopInstance.version > version) { shopInstance.errors.rejectValue("version", "default.optimistic.locking.failure", [message(code: 'shop.label', default: 'Shop')] as Object[], "Another user has updated this Shop while you were editing") render(view: "edit", model: [shopInstance: shopInstance]) return } } shopInstance.properties = params if (!shopInstance.hasErrors() && shopInstance.save(flush: true)) { flash.message = "${message(code: 'default.updated.message', args: [message(code: 'shop.label', default: 'Shop'), shopInstance.id])}" redirect(action: "show", id: shopInstance.id) } else { render(view: "edit", model: [shopInstance: shopInstance]) } } else { flash.message = "${message(code: 'default.not.found.message', args: [message(code: 'shop.label', default: 'Shop'), params.id])}" redirect(action: "list") } } def delete = { def shopInstance = Shop.get(params.id) if (shopInstance) { try { shopInstance.delete(flush: true) flash.message = "${message(code: 'default.deleted.message', args: [message(code: 'shop.label', default: 'Shop'), params.id])}" redirect(action: "list") } catch (org.springframework.dao.DataIntegrityViolationException e) { flash.message = "${message(code: 'default.not.deleted.message', args: [message(code: 'shop.label', default: 'Shop'), params.id])}" redirect(action: "show", id: params.id) } } else { flash.message = "${message(code: 'default.not.found.message', args: [message(code: 'shop.label', default: 'Shop'), params.id])}" redirect(action: "list") } } def api_list = { def results = Shop.list() render(contentType:"text/xml") { shops { for(s in results) { shop(name:s.name, logoPath:s.logoPath, redirectURL:s.redirectURL) } } } } def api_show = { Shop shop = Shop.get(params.id) render shop as XML } def api_save = { def xml = request.XML def shop = new Shop() shop.name = xml.name.text() shop.active = xml.active.text() def markup if(shop.save()) { markup = { status("OK") } } else { markup = { status("FAIL") } } render contentType: "text/xml; charset=utf-8", markup } } <_42_52_ /> create.gsp: <_42_52_ /> <_50_52_45_ CLASS="bbcode"> <g:form action="save" enctype="multipart/form-data"> <div class="dialog"> <table> <tbody> <tr class="prop">


Stelle deine Groovy-Frage jetzt!


Diese Seite zeigt den Thread "Frage zu URLMappings" 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.