//in a controller def showAllHeaders(){ StringBuilder sb = new StringBuilder() request.headerNames.each{ sb.append(it).append(": ").append(request.getHeader(it)) .append("<br>") } render(sb.toString()) }
Inside a method in a controller you do:
flash.message = "The request ${camsRequest.getRequestReference()} has been released." //or, and flash.error = "Internal Error. Unable to release this request. If this problem persist, please contact the technical support." //or, and List<String> errorMessages = [] errorMessages.add("First additional error") errorMessages.add("Second additional error") flash.errorMessages = errorMessages
Inside a GSP view, you do:
<div id="message-container" class="container-fluid"> <g:if test="${flash.message}"> <div class="row"> <div class="col-sm-12 alert alert-info"> <b>${flash.message}</b> </div> </div> </g:if> <g:if test="${flash.error}"> <div class="row"> <div class="col-sm-12 alert alert-danger"> <b>${flash.error}</b> <ul> <g:each var="errorMsg" in="${flash.errorMessages}"> <li>${errorMsg}</li> </g:each> </ul> </div> </div> </g:if> <% flash.message = null flash.error = null flash.errorMessages = null %> </div>
Note that we added flash.message = null
, flash.error = null
, and flash.errorMessages = null
to make sure those field are cleaned up. We do this because I something notice that these values in flash
are not being clean after a response.