gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 20:03:22 25 4
gpt4 key购买 nike

解决方案

我之前曾尝试将访问器添加到 LineItem 类中,例如

public String getItemNo() {
return itemNo;
}

并将 FTL 从 ${lineItem.itemNo} 更改为 ${lineItem.getItemNo()} 但这没有用。 解决方案是添加访问器,但更改 FTL(保持为 ${lineItem.itemNo}

背景

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

使用 Freemarker 的 Java 类

这是我的代码的更简化版本,以便更快地理解要点。 LineItem 是一个具有公共(public)属性(匹配此处使用的名称)的公共(public)类,使用一个简单的构造函数来设置每个值。我也尝试过将私有(private)变量与访问器一起使用,但这也没有用。

我还将 LineItem 对象的 List 存储在 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);

飞越

<#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 方法。

关于java - 访问 <#list> 中对象的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18329192/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com