2011-05-16 19 views
6

HI,Usar propiedades Java en Freemarker

Tengo un archivo típico messages.properties en mi aplicación. Estoy tratando de generar un correo electrónico usando Freemarker.

La plantilla de Freemarker debe generar un String, después de lo cual enviaré el String al usuario por correo electrónico. Sin embargo, lo necesitamos multilingüe. Así que Properties me vino a la mente.

Mi archivo de propiedades es el siguiente:

mail.layout.contactus=Contacteer ons 
mail.layout.greeting=Hoi 

En Java, entro en el archivo Properties en mi HashMap así:

rootMap.put("lang", (mail.getLanguage().equals(Language.FRENCH) ? langFR : langNL)); 

y tratar de leerlo en FreeMarker así:

<p>${lang.mail.layout.greeting} ${user.firstname},</p> 

Pero consigue la siguiente excepción:

freemarker.core.InvalidReferenceException: Expression lang.mail is undefined on line 10, column 116 in layout/email.ftl. 

Extrañamente, sólo dice lang.mail a diferencia de lang.mail.layout.greeting

Editar: intenté definir las llaves de esta manera:

mail_layout_contactus=Contacteer ons 
mail_layout_greeting=Hoi 

que no trabajan

Respuesta

4

creo el problema es que con una clave de lang.mail.layout.greeting, Freemarker trea ts cada parte entre . s como hash es decir, una variable de contenedor que puede tener subvariables. Por lo tanto, intenta obtener el objeto al que hace referencia el lang desde el modelo de datos y luego intenta obtener la variable referenciada por mail desde lang. En su caso, sin embargo, no existe tal objeto, de ahí el error.

The documentation has this to say about variable names:

En esta expresión el nombre de la variable sólo puede contener letras (incluyendo cartas no latinos), dígitos (incluyendo los dígitos no latinos), subrayado (_), en dólares ($), por lo signo (@) y hash (#). Además, el nombre no debe comenzar con un dígito.

que te pueden hacer uso de la alternative syntax to get data from a hash (siempre y cuando la expresión se evalúa como una cadena)

<p>${lang["mail.layout.greeting"]} ${user.firstname},</p> 
+0

Grande, que funciona! Gracias –