Ejemplo n.º 1
0
 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);
   }
 }
Ejemplo n.º 2
0
  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;
  }
Ejemplo n.º 3
0
 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);
 }
Ejemplo n.º 4
0
  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);
    }
  }
Ejemplo n.º 5
0
 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;
 }