Freemarker, como todos los generadores de plantillas, es muy especial con su nomenclatura. Mientras utiliza “$” para especificar las variables, para la lógica empleará “#“, de forma muy similar a como lo hacen otros, como por ejemplo Thymeleaf, con su integración en Spring MVC.
Así, al acceder a una lista lo que hacemos es recorrerla, es decir que generamos un bucle. Después accedemos a los elementos de cada vuelta del bucle, y como objetos que son, accedemos a sus propiedades a través del “.”. Veamos un ejemplo:
<#list lineItems as lineItem> <tr> <td>${lineItem.itemNo}</td> <td>${lineItem.quantity}</td> <td>${lineItem.type}</td> <td>${lineItem.price}</td> <td>${lineItem.shipping}</td> <td>${lineItem.gst}</td> <td>${lineItem.totalPrice}</td> </tr> </#list>1234567891011 <#list lineItems as lineItem> <tr> <td>${lineItemitemNo}</td> <td>${lineItemquantity}</td> <td>${lineItemtype}</td> <td>${lineItemprice}</td> <td>${lineItemshipping}</td> <td>${lineItemgst}</td> <td>${lineItemtotalPrice}</td> </tr></#list>
Lo único que hay que tener en cuenta es que las propiedades tienen que tener acceso público. En caso de ser privadas y tener generados los getters y setters, a pesar de estar los getters, no haremos uso de ellos (aunque deben estar creados o no funcionará), sino de directamente las propiedades en sí.
Ya sé que suena un poco raro así, pero ya he dicho que Freemarker es especial, y esta es una de sus cosas.