Grails’ withFormat block
Some things are not really different in Rails and Grails world. The pendant to Rails’ respond_to method is Grails withFormat block.
Both are supposed to render a different content type as requested according to the accept header and and the format parameter.
And both fail to some extend with Internet Explorer 5.5 to 7.0. For a longer explanation see my post on respond_to linked above. In short: First visit always gave me the an Excel File, all subsequent visits the intended html page.
I used nearly the exact solution within Grails 1.0.4 as in Rails:
withFormat { xls { // Same crap with IE 6/7 as with rails, compared to // http://info.michael-simons.eu/2007/08/06/rails-respond_to-method/ if(params.format == 'xls') { def df = new SimpleDateFormat("yyyy-MM-dd") def report = ExcelReport.findById(params.reportId) if(report == null) report = ExcelReport.findByBezeichnung('Absatzprognose') response.contentType = 'application/vnd.ms-excel' response.setHeader("content-disposition", "attachment;filename=some_filenname.xls") excelService.runExcelReport( report.bezeichnung, "some_parameter", response.outputStream ) return } } } |
Grails 1.1 seems to have fixed some issues on this case and a default or empty html {} block in front of any other format like so will do the trick:
withFormat { html { // depending on your needs } xls { // funny excel stuff } } |