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.

Excepción de referencia no válida de Freemarker.

Estoy intentando pasar una colección a Freemarker:

Mi clase interna Recipient:

@Data
private class Recipient {
        private String phone;
        private String languageValue;
}

Mi plantilla:

    <#list recipients as recipient> 
        {
            "address": "${recipient.phone}",
            "language": "en"
        }

Mi código Java:

List<recipient> recipientList = new ArrayList<>();
Recipient r = new Recipient();
r.setPhone("123");
recipientList.add(r);

Template template = new Template("name", new StringReader(myTemplate), new Configuration());
Writer out = new StringWriter();
Map<string, object=""> dataModel = new HashMap<>();
dataModel.put("recipients", recipientList);
template.process(dataModel, out);

Pero estoy recibiendo este error:

> [pool-1-thread-7] freemarker.runtime: Error executing FreeMarker template freemarker.core.InvalidReferenceException: The following has evaluated to null or missing: recipient.phone  [in template "name" at line 1, column 220]

¿Qué está mal? Por favor ayuda. Gracias.</string,>

Tags:  ,

Answer

  1. Avatar for davy.ai

    En tu código Java, estás estableciendo el número de teléfono del destinatario, pero no el valor de idioma. Sin embargo, en tu plantilla Freemarker, estás intentando acceder a recipient.phone y recipient.language, lo que significa que el languageValue está nulo o ausente.

    Para solucionar esto, necesitas establecer el languageValue para los destinatarios en tu código Java:

    List<recipient> recipientList = new ArrayList<>();
    Recipient r = new Recipient();
    r.setPhone("123");
    r.setLanguageValue("Inglés"); //añade esta línea para establecer el valor de idioma
    recipientList.add(r);
    

    Luego, en tu plantilla Freemarker, puedes acceder a recipient.languageValue en lugar de recipient.language:

    <#list recipients as recipient> 
        {
            "address": "${recipient.phone}",
            "language": "${recipient.languageValue}"
        }
    
    

    Esto debería resolver el problema y permitirte pasar la colección a Freemarker satisfactoriamente.

Comments are closed.