scala - 无法读取 Freemarker 模板中的对象值

标签 scala velocity freemarker

我无法读取 Freemarker Templet 中的 scala/java 对象值

我试过这个:

    case class ScheduleEmail(workOrderNo:String,
                             name:String,
                             woType:String,
                             numberOfAssets:String,
                              artisan:String,
                             dueDate:Date,priority:String)

    object ScheduleMailSending extends  App{
      val scheduleEmail1= List(ScheduleEmail("1", "Oil Change1", "WO", "3", "XYZ", Date.valueOf("2015-01-01"), "High"))
      val configaration = new Configuration
      configaration.setClassForTemplateLoading(this.getClass, "/")
      configaration.setObjectWrapper(new DefaultObjectWrapper())
      val data: util.HashMap[String, Object] = new util.HashMap[String, Object]
      val templet = configaration.getTemplate("schedule.ftl")
      data.put("mails",scheduleEmail1.asJava)
      val writer =new StringWriter()
     templet.process(data,writer)
      println("writer"+writer)
    }

我的模板是-

<#list mails as std>

    WorkOrderNo:${std.workOrderNo}
    woType:${std.woType}

</#l

我正在为这个错误而苦苦挣扎-

SEVERE: Error executing FreeMarker template
FreeMarker template error:
For "${...}" content: Expected a string or something automatically convertible to string (number, date or boolean), but this evaluated to a sequence+method (wrapper: f.e.b.SimpleMethodModel):
==> std.workOrderNo  [in template "schedule.ftl" at line 2, column 15]

The failing instruction (FTL stack trace):
----------
==> ${std.workOrderNo}  [in template "schedule.ftl" at line 2, column 13]
----------

Java stack trace (for programmers):

谁能帮我解决这个问题

最佳答案

Scala 不为 workOrderNo(也不为 BeanInfo)生成 getter 方法,因此它不是 JavaBean 属性。它虽然生成了一个 String workOrderNo() 方法(我的 Scala 生锈了,但错误消息也表明了这一点)。因此,您必须在模板中编写 std.workOrderNo()。或者,您应该通过 setMethodAppearanceFineTuner(MethodAppearanceFineTuner) 自定义 ObjectWrapper 以将 String workOrderNo() 识别为属性。如果您经常使用 Scala,那当然是您应该做的。

关于scala - 无法读取 Freemarker 模板中的对象值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32201528/

相关文章:

java - ftl 模板中的当前日期

scala - 在这个参数化的 Scala 函数中,为什么我需要强制转换?

scala - 如何自动:load script in Scala shell?

java - 如何使用 java 类加载器调用带参数的 scala 函数?

velocity - 如何在 Velocity 模板引擎中将十进制数四舍五入到 2 位?

java - 明文 Velocity 模板单行 foreach

java - Freemarker 寻找默认模板

multithreading - 如何使用 future 进行多线程处理?

java - Velocity 中的 For 循环

java - Freemarker 多个配置实例