withFormat
Purpose
Used to execute different responses based on the incoming request Accept header, format parameter or URI extension. See content negotiation for more information.Examples
import grails.converters.*class BookController {
def books
def list = {
this.books = Book.list()
withFormat {
html bookList:books
js { render "alert('hello')" }
xml { render books as XML }
}
}
}Description
The withFormat method takes a block within the scope of which you can execute different methods whose names match the content type you want to respond to. For example:withFormat {
html bookList:books
js { render "alert('hello')" }
xml { render books as XML }
} Here we invoke three methods called html, js and xml that use mime type names configured in grails-app/conf/Config.groovy (See content negotiation for more information). The call to html accepts a model (a map) which is passed on to the view. Grails will first search for a view called grails-app/views/book/list.html.gsp and if that is not found fallback to grails-app/views/book/list.gsp.If you require the model the be lazily executed you can pass a closure or block instead of a map:withFormat {
html { [bookList:Book.list()] }
…
} The block will only get executed if the html format is matched.