java – 访问<#list>中对象的属性

我之前曾尝试过为LineItem类添加访问器

public String getItemNo() {
    return itemNo;
}

并将FTL从${lineItem.itemNo}更改为${lineItem.getItemNo()},但这不起作用.解决方案是添加访问者但不更改FTL(将其保留为${lineItem.itemNo}.

背景

我正在使用Freemarker格式化一些电子邮件.在这封电子邮件中,我需要在发票上列出一系列产品信息.我的目标是传递一个对象列表(在一个Map中),以便我可以在FTL中迭代它们.目前我遇到一个问题,我无法从模板中访问对象属性.我可能只是错过了一些小东西,但此刻我很难过.

使用Freemarker的Java类

这是我的代码的更简化版本,以便更快地获得重点. LineItem是一个具有公共属性的公共类(与此处使用的名称相匹配),使用简单的构造函数来设置每个值.我也尝试使用带有访问器的私有变量,但这也不起作用.

我也将这个LineItem对象列表存储在Map中,因为我还使用Map作为其他键/值对.

Map<String, Object> data = new HashMap<String, Object>();
List<LineItem> lineItems = new ArrayList<LineItem>();

String itemNo = "143";
String quantity = "5"; 
String option = "Dried";
String unitPrice = "12.95";
String shipping = "0.00";
String tax = "GST";
String totalPrice = "64.75"; 

lineItems.add(new LineItem(itemNo, quantity, option, unitPrice, shipping, tax, totalPrice));
data.put("lineItems", lineItems); 

Writer out = new StringWriter();
template.process(data, out);

FTL

<#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>

错误

FreeMarker template error:
The following has evaluated to null or missing:
==> lineItem.itemNo  [in template "template.ftl" at line 88, column 95]

LineItem.java

public class LineItem {
    String itemNo;
    String quantity;
    String type;
    String price;
    String shipping;
    String gst;
    String totalPrice;

    public LineItem(String itemNo, String quantity, String type, String price,
                    String shipping, String gst, String totalPrice) {
        this.itemNo = itemNo;
        this.quantity = quantity;
        this.type = type;
        this.price = price;
        this.shipping = shipping;
        this.gst = gst;
        this.totalPrice = totalPrice;
    }
}  

解决方法:

LineItem类缺少其所有属性的getter方法.因此,Freemarker无法找到它们.您应该为LineItem的每个属性添加一个getter方法.

上一篇:SpringBoot中整合freemarker时配置文件application.properties示例代码


下一篇:使用freemarker导出word文档