gpt4 book ai didi

java - 在 Freemarker 中处理 null

转载 作者:太空宇宙 更新时间:2023-11-04 06:50:03 24 4
gpt4 key购买 nike

情况:

  • 使用 freemarker 的旧 java 项目有许多工作出色的成品模板。
  • 每个模板都使用 Transaction 对象中的数据。
  • 这个交易对象非常大,因为包含了有关交易的所有数据。
  • 模板中有很多这样的表达式:get("object1").getNestedObject2().getNestedObject3().getValue();

问题:新的要求出现:所有模板都必须经过处理才能预览,没有真实数据。所有数字均应为零,所有字符串均应为 ---。

不满意的解决方案:

  1. 重新制作所有模板以检查空值。 (工作量大而且不安全)
  2. 创建包含所有默认值的 Transaction 对象。 (工作量很大)

我的问题是:我可以对 Freemarker 说,如果他发现 null 或一路上发现 null,如果他期待的是数字,或者 --- 如果他期待的是字符串,那么他应该使用 0。

或者您有更好的解决方案吗?

最佳答案

如果您需要向模板显示虚拟数据模型,最好的选择可能是自定义 ObjectWrapper(请参阅Configuration.setObjectWrapper)。读取数据模型的所有内容都通过 TemplateModel-s 运行,根 TemplateModelObjectWrapper 创建,因此它可以控制模板为哪些名称获取哪些值。但问题是,当你必须返回一个名称的虚拟值时,你如何知道它的类型是什么?这不仅要确定它是字符串还是数字,还要确定它是方法(如 getNestedObject2)还是哈希值(后面可以跟 . 的内容)。可以提供帮助的是,FreeMarker 允许一个值具有多种类型,因此您可以返回一个可以用作方法、哈希和字符串等的值。根据 hack 的应用程序可能已经足够好了,但您仍然必须决定该值是字符串还是数字,因为如果值既是字符串又是数字,${} 将打印数字值。

关于java - 在 Freemarker 中处理 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23430636/

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