es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo obtener todos los parámetros del modelo desde el árbol de análisis sintáctico de Freemarker?

Caso:
Cuando estoy aplicando una plantilla FTL en mi sistema, quiero resolver todos los parámetros del modelo desde la plantilla para que los usuarios sepan cómo pasar estos parámetros en lugar de leer toda la plantilla.

Ejemplo:

SELECT
    platform
FROM
(
<#list tableList as table>
    SELECT
            __time,
            platform
    FROM
    ${table}
    <#if table_has_next>UNION ALL

)
WHERE
__time BETWEEN TIMESTAMP '${startTime}' AND '${endTime}'
GROUP BY
    1

Después de llamar a un método, el resultado puede ser en el siguiente formato:

{
   "startTime" : "",
   "endTime": "",
   "tableList": null
}

Intenté usar el rootElement generado por JavaCC en el núcleo de Freemaker, pero no es público y arroja un error.

¿Alguien puede ayudarme?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para resolver este problema, puedes utilizar la interfaz TemplateModel proporcionada por FreeMarker. La interfaz TemplateModel provee métodos para obtener todos los parámetros del modelo desde la plantilla.

    Aquí te mostramos cómo puedes implementar esto:

    1. Crea un método en tu clase Java que acepte un objeto Template como parámetro.
    2. Obtén el objeto TemplateModel usando el método getDataModel() del objeto Template:

      TemplateModel templateModel = template.getDataModel();
      

    3. Haz un casting del objeto TemplateModel a BeansWrapper:
      BeansWrapper wrapper = (BeansWrapper) templateModel;
      
    4. Obtén el objeto Map que contiene todos los parámetros del modelo usando el método unwrap() de BeansWrapper:
      Map<?, ?> paramMap = (Map<?, ?>) wrapper.unwrap(templateModel);
      
    5. Itera a través del paramMap e imprime los nombres de los parámetros:
      for (Map.Entry<?, ?> entry : paramMap.entrySet()) {
         System.out.println("Nombre del parámetro: " + entry.getKey());
      }
      

    Puedes modificar el código anterior según tus necesidades. Este método te ayudará a resolver todos los parámetros del modelo de la plantilla FTL.

Comments are closed.