当前位置: 首页 > 知识库问答 >
问题:

访问

东门城
2023-03-14

我以前曾尝试向LineItem类添加访问器,如

public String getItemNo() {
    return itemNo;
}

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

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

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

我还将列表中的行项对象存储在映射中,因为我还将映射用于其他键/值对。

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]
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;
    }
}  

共有2个答案

酆景辉
2023-03-14

对我来说,将@CompileStatic添加到模型中就成功了。

阎鸿煊
2023-03-14

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

 类似资料:
  • URL格式 ThinkCMF5采用的是混合模式路由,也就是说同时支持路由和PATH_INFO方式; 如果没有设置路由规则,默认就采用PATH_INFO方式,URL 格式如下: http://yourServerName/index.php/应用/控制器/操作/[参数名/参数值...] URL大小写 ThinkCMF5的 URL 是不区分大小写的,如: http://localhost/index

  • URL格式 ThinkCMF6.0采用的是混合模式路由,也就是说同时支持路由和PATH_INFO方式; 如果没有设置路由规则,默认就采用PATH_INFO方式,URL 格式如下: http://yourServerName/index.php(或其它入口文件)/应用/控制器/操作/[参数名/参数值...] URL大小写 ThinkCMF的 URL 是不区分大小写的,如: http://local

  • URL设计 ThinkPHP5.1在没有定义路由的情况下典型的URL访问规则是: http://serverName/index.php(或者其它应用入口文件)/模块/控制器/操作/[参数名/参数值...] 支持切换到命令行访问,如果切换到命令行模式下面的访问规则是: >php.exe index.php(或者其它应用入口文件) 模块/控制器/操作/[参数名/参数值…] 可以看到,无论是URL访问

  • Kibana 是一个 web 应用,可以通过5601端口访问。只需要在浏览器中指定 Kibana 运行的机器,然后指定端口号即可。例如, localhost:5601 或者 http://YOURDOMAIN.com:5601 。 当访问 Kibana 时,Discover 页默认会加载默认的索引模式。时间过滤器设置的时间为过去15分钟,查询设置为匹配所有 (*) 。 如果看不到任何文档,试着把时

  • JAVA访问修饰符的可访问性 公众 在 同一班级 同一套餐 子类 宇宙/其他软件包 我在互联网上寻找这些问题的答案,因为我有多个答案。一个视频说未声明的访问修饰符是公共的,而我看到另一个书面来源说未声明的访问修饰符在子类和其他包中没有限制。试图确认哪个是真的。

  • 问题内容: 我正在寻找一种在Java App(使用JDBC)中打开Access MDB文件的方法。 快速的Google搜索建议我为此需要JDBC-ODBC Bridge。 这是否意味着我需要配置要在其上运行应用程序的每个系统,以便为要打开的MDB提供ODBC DSN? 还有一个问题(因为我以前从未使用过ODBC):通信是通过某种套接字(以客户机/服务器方式)还是通过方法/函数调用(例如嵌入Derb