private void renderTemplateForModel( Template template, Object modelObject, Object target, Writer out) throws IOException { if (modelObject instanceof Map) { Writable w = template.make((Map) modelObject); w.writeTo(out); } else { Writable w = template.make(new BeanMap(target)); w.writeTo(out); } }
private boolean renderTemplate( Object target, GroovyObject controller, GrailsWebRequest webRequest, Map argMap, Writer out) { boolean renderView; String templateName = argMap.get(ARGUMENT_TEMPLATE).toString(); String contextPath = getContextPath(webRequest, argMap); String var = (String) argMap.get(ARGUMENT_VAR); // get the template uri String templateUri = GroovyPageUtils.getTemplateURI(controller, templateName); // retrieve gsp engine GroovyPagesTemplateEngine engine = (GroovyPagesTemplateEngine) webRequest.getApplicationContext().getBean(GroovyPagesTemplateEngine.BEAN_ID); try { Resource r = engine.getResourceForUri(contextPath + templateUri); if (!r.exists()) { r = engine.getResourceForUri(contextPath + "/grails-app/views/" + templateUri); } Template t = engine.createTemplate(r); // templateUri); if (t == null) { throw new ControllerExecutionException( "Unable to load template for uri [" + templateUri + "]. Template not found."); } Map binding = new HashMap(); if (argMap.containsKey(ARGUMENT_BEAN)) { Object bean = argMap.get(ARGUMENT_BEAN); if (argMap.containsKey(ARGUMENT_MODEL)) { Object modelObject = argMap.get(ARGUMENT_MODEL); if (modelObject instanceof Map) binding.putAll((Map) modelObject); } renderTemplateForBean(t, binding, bean, var, out); } else if (argMap.containsKey(ARGUMENT_COLLECTION)) { Object colObject = argMap.get(ARGUMENT_COLLECTION); if (argMap.containsKey(ARGUMENT_MODEL)) { Object modelObject = argMap.get(ARGUMENT_MODEL); if (modelObject instanceof Map) binding.putAll((Map) modelObject); } renderTemplateForCollection(t, binding, colObject, var, out); } else if (argMap.containsKey(ARGUMENT_MODEL)) { Object modelObject = argMap.get(ARGUMENT_MODEL); renderTemplateForModel(t, modelObject, target, out); } else { Writable w = t.make(new BeanMap(target)); w.writeTo(out); } renderView = false; } catch (GroovyRuntimeException gre) { throw new ControllerExecutionException( "Error rendering template [" + templateName + "]: " + gre.getMessage(), gre); } catch (IOException ioex) { throw new ControllerExecutionException( "I/O error executing render method for arguments [" + argMap + "]: " + ioex.getMessage(), ioex); } return renderView; }
private void renderTemplateForBean( Template template, Map binding, Object bean, String varName, Writer out) throws IOException { if (StringUtils.isBlank(varName)) { binding.put(DEFAULT_ARGUMENT, bean); } else binding.put(varName, bean); Writable w = template.make(binding); w.writeTo(out); }
private void renderTemplateForCollection( Template template, Map binding, Object colObject, String var, Writer out) throws IOException { if (colObject instanceof Collection) { Collection c = (Collection) colObject; for (Iterator i = c.iterator(); i.hasNext(); ) { Object o = i.next(); if (StringUtils.isBlank(var)) binding.put(DEFAULT_ARGUMENT, o); else binding.put(var, o); Writable w = template.make(binding); w.writeTo(out); } } else { if (StringUtils.isBlank(var)) binding.put(DEFAULT_ARGUMENT, colObject); else binding.put(var, colObject); Writable w = template.make(binding); w.writeTo(out); } }
private boolean renderMarkup(Closure closure, HttpServletResponse response) { boolean renderView; StreamingMarkupBuilder b = new StreamingMarkupBuilder(); Writable markup = (Writable) b.bind(closure); try { markup.writeTo(response.getWriter()); } catch (IOException e) { throw new ControllerExecutionException( "I/O error executing render method for arguments [" + closure + "]: " + e.getMessage(), e); } renderView = false; return renderView; }