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

Pebble/FreeMarker中变量/插值的惰性计算

咸琪
2023-03-14

假设我在pebble或freemarker中有一个模板(我正在考虑使用的两个引擎)。它可能看起来像这样:

<Node>
    <Element attribute="{{ VAR_A }}"/>
    <Element attribute="{{ VAR_F }}"/>
    <Element attribute="{{ VAR_N }}"/>
</Node>

在我的Java代码中,我需要提供一个包含这些变量的对象,我相信它可以是两个引擎中变量名到对象的映射。

编辑:我不知道模板会是什么样子,当我必须评估它,因为它将由用户定义。甚至他们提供的变量都将是用户定义的字符串-这就是为什么我需要在提供数据之前获取(并分析)它们。

共有1个答案

宗波涛
2023-03-14

使用Freemarker生成的每种文档都有自己的模板。每个模板都将有一个它使用的变量集。在Java代码中,提供了将变量名映射到值的映射。如果您有一个不同的Java方法对应于每个模板,这些方法可以为该模板设置所需的最小映射。该映射不必是hashmap;理论上,您可以自己编写map接口的实现,该接口在getvalues(etc)方法中执行延迟计算。但这几乎肯定比它的价值更麻烦。您提供的map中的值不必是string对象;Freemarker将使用每个对象的toString方法,这提供了一种惰性计算。

 类似资料:
  • 问题内容: 在PHP中,可以编写: 但是在Python中,它是: 有没有办法代替我在字符串中插入变量?如果没有的话,这更像pythonic吗? 获得参考的任何人的奖励积分 问题答案: 您现在的操作方式是一种Python方式。您也可以使用本地人字典。像这样: 现在,它看起来不太像pythonic,但这是实现PHP格式相同效果的唯一方法。我只会坚持您的操作方式。

  • 不仅可以直接在属性值中使用变量,还可以用类似 @{name} 的结构,以“插值”的方式在选择器名、属性名、URL、import、媒体查询中使用变量。在编译时,变量将被替换为它们相应的值。 1)选择器名插值 Less选择器名称中可以引用任何变量。如: @head: h; .@{head}2 {   font-size: 16px; } 编译后的CSS代码为: .h2 {   font-size:

  • 简介 惰性求值(Lazy evaluation)是在需要时才进行求值的计算方式。惰性求值自然地在数据结构中包含递归,可以以简单的方式表示无限的概念,这种方式有利于程序的模块化。 你可以从《Why Functional Programming Matters》中知晓惰性计算可以带来哪些好处。 Haskell语言以采用惰性求值而广为人熟知。Scheme也部分采用了惰性求值。 用于惰性求值的函数 下面这

  • 问题内容: 以下初始化当前在调用的行中产生此错误: 无法在属性初始化程序中使用实例成员’getEventCalendar’;属性初始化程序在“自我”可用之前运行。 是否有初始化任何适当的方式与依赖于其他对象类型的值实例变量的(不只是单纯?我已经尝试过将方法从一种方法转换为一种功能,但这也无济于事。 问题答案: 您可以使用仅执行一次的闭包,该闭包捕获的属性并在执行时使用它们(=第一次使用属性)。例如

  • 我读了Java8API中关于流抽象的内容,但我不太理解这句话: 当筛选操作创建一个新流时,该流是否包含已筛选的元素?它似乎理解了流只有在遍历时才包含元素,即使用终端操作。但是,than,什么包含过滤后的流?我糊涂了!!!

  • 如何在jQuery AJAX中更改成功块中freemarker变量的值,我的页面有两个控制器第一个控制器使用GET方法返回一个带有视图名称的简单字符串,第二个控制器使用json和POST方法处理数据 给你 我的第二个控制器 我的Json方法 我的传呼myform.html 到目前为止,我的freemarker变量得到了我放在success块中的值,但在我按下submit按钮之前它显示为succes